동적 키 이름이 있는 하위 개체가 포함된 복잡한 JSON 구조를 처리할 때 Newtonsoft JSON.NET을 사용하여 역직렬화하면 문제가 발생할 수 있습니다. 이 기사에서는 이러한 구조와 관련된 시나리오를 자세히 살펴보고 사용자 지정 JSON 변환기를 사용하여 완전한 솔루션을 제공합니다.
다음 JSON 구조를 고려하세요.
<code class="language-json">{ "users" : { "parentname":"test", "100034" : { "name" : "tom", "state" : "WA", "id" : "cedf-c56f-18a4-4b1" }, "10045" : { "name" : "steve", "state" : "NY", "id" : "ebb2-92bf-3062-7774" }, "12345" : { "name" : "mike", "state" : "MA", "id" : "fb60-b34f-6dc8-aaf7" } } }</code>
이 구조에서 "users" 개체에는 알려진 속성("parentname")과 알 수 없는 속성(하위 개체를 나타내는 숫자 키 포함)이 혼합되어 있습니다. 목표는 이 구조를 하위 개체가 강력한 형식의 클래스로 표시되는 C# 개체 모델로 역직렬화하는 것입니다.
표준 JSON.NET 코드를 사용하여 JSON을 역직렬화하려는 초기 시도는 다음과 같습니다.
<code class="language-csharp">class RootObject { public string ParentName { get; set; } public Dictionary<string, User> users { get; set; } } class User { public string name { get; set; } public string state { get; set; } public string id { get; set; } }</code>
"사용자" 개체의 알 수 없는 속성으로 인해 이 개체 모델에 대한 역직렬화가 실패합니다. 기본적으로 JSON.NET에서는 속성 이름이 클래스 속성과 일치할 것으로 예상하고 숫자 키가 User 클래스의 어떤 속성과도 일치하지 않으므로 역직렬화 프로세스가 실패합니다.
이 문제를 해결하려면 맞춤형 JSON 변환기가 필요합니다. TypedExtensionDataConverter
이 문제를 우아하게 해결합니다. 코드는 다음과 같습니다.
<code class="language-csharp">public class TypedExtensionDataConverter<T> : JsonConverter { // ... [此处省略实现,篇幅原因] }</code>
이 변환기를 사용하면 알 수 없는 속성을 유형이 지정된 컨테이너(이 경우 사용자 개체 사전)로 역직렬화할 수 있습니다.
<code class="language-csharp">[JsonConverter(typeof(TypedExtensionDataConverter<Users>))] class Users { public Users() { this.UserTable = new Dictionary<string, User>(); } [JsonProperty("parentname")] public string ParentName { get; set; } [JsonTypedExtensionData] public Dictionary<string, User> UserTable { get; set; } }</code>
JsonTypedExtensionDataAttribute
을 사용하여 변환기는 알 수 없는 속성을 UserTable
사전에 직렬화/역직렬화하는 방법을 알고 있습니다.
맞춤형 변환기를 사용하면 전체 솔루션은 다음과 같습니다.
<code class="language-csharp">class RootObject { [JsonProperty("users")] public Users Users { get; set; } } [JsonConverter(typeof(TypedExtensionDataConverter<Users>))] class Users { // ... [如上实现] } class User { // ... [不变] }</code>
역직렬화된 JSON 구조는 이제 RootObject
개체 내의 Users
사전에 저장된 하위 개체를 포함하여 예상 값으로 UserTable
를 채웁니다.
위 내용은 Newtonsoft.Json을 사용하여 동적 숫자 키로 JSON을 역직렬화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!