JSON 데이터를 처리할 때 알려진 필드와 알려지지 않은 필드가 포함된 결과가 혼합되어 있는 경우가 종종 있습니다. 이로 인해 고정된 속성 집합이 있는 클래스로 데이터를 역직렬화할 때 문제가 발생할 수 있습니다.
질문: 알려진 필드와 알려지지 않은 필드가 포함된 JSON 결과가 있는 경우 이를 알려진 필드에 대한 속성을 포함하고 알려지지 않은 필드를 처리할 수 있는 클래스로 역직렬화하려면 어떻게 해야 합니까?
가능한 해결 방법:
JSON.NET용 사용자 정의 계약 파서 사용: 이 솔루션에서는 알 수 없는 필드를 처리하려면 사용자 정의 계약 파서가 필요합니다. 그러나 이를 달성하는 방법을 이해하는 것은 어려울 수 있습니다.
데이터 계약 직렬 변환기: 데이터 계약 직렬 변환기는 직렬화 및 역직렬화를 위한 이벤트를 제공하지만 특정 메서드 재정의만 지원하고 필드 처리에 대한 전체 제어를 제공하지는 않습니다.
동적 객체로 직렬화 및 사용자 정의 매핑: 이 접근 방식에는 JSON을 동적 개체로 역직렬화한 다음 알 수 없는 필드를 수동으로 매핑하는 작업이 포함됩니다. 가능하더라도 많은 작업이 필요할 가능성이 높습니다.
DynamicObject에서 상속: 역직렬화를 위해 리플렉션을 사용하는 직렬 변환기는 DynamicObject에서 상속되는 클래스를 사용할 때 tryGetMember 및 trySetMember 메서드를 호출하지 못할 수 있습니다.
사용자 정의 직렬 변환기와 함께 RESTSharp 사용: RESTSharp에서 이 문제를 해결하려면 사용자 지정 직렬 변환기를 사용해야 합니다.
JsonExtensionDataAttribute(JSON.NET v5)를 사용하는 더 나은 솔루션:
JSON.NET 버전 5에는 알 수 없는 필드를 보다 쉽고 효율적으로 처리할 수 있는 방법을 제공하는 JsonExtensionDataAttribute가 도입되었습니다.
코드 예:
<code class="language-csharp">public class Product { [JsonProperty("id")] public string Id { get; set; } [JsonProperty("name")] public string Name { get; set; } [JsonExtensionData] public Dictionary<string, JToken> ExtraFields { get; set; } }</code>
이 예에서 ExtraFields 사전에는 JSON 결과의 알 수 없는 필드에 대한 키-값 쌍이 포함됩니다.
결론:
개발자는 JSON.NET 버전 5의 JsonExtensionDataAttribute를 활용하여 JSON 결과에서 알려진 필드와 알려지지 않은 필드를 효율적으로 관리하고 ExtraFields 사전을 통해 알려지지 않은 필드에 액세스할 수 있습니다.
위 내용은 알려진 필드와 알려지지 않은 필드가 모두 포함된 JSON을 C# 클래스로 역직렬화하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!