> 백엔드 개발 > C++ > 알려진 필드와 알려지지 않은 필드가 모두 포함된 JSON을 C# 클래스로 역직렬화하려면 어떻게 해야 합니까?

알려진 필드와 알려지지 않은 필드가 모두 포함된 JSON을 C# 클래스로 역직렬화하려면 어떻게 해야 합니까?

DDD
풀어 주다: 2025-01-18 09:06:09
원래의
187명이 탐색했습니다.

How Can I Deserialize JSON with Both Known and Unknown Fields into a C# Class?

C# 클래스에서 알려지거나 알려지지 않은 JSON 필드의 역직렬화

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿