C#에서 동적으로 명명된 하위 개체의 JSON 역직렬화
동적으로 이름이 지정된 하위 객체가 있는 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>
다음 코드를 사용하여 역직렬화하려는 시도가 실패할 수 있습니다.
<code class="language-csharp">public class RootObject { public string ParentName { get; set; } public Dictionary<string, User> users { get; set; } } public class User { public string name { get; set; } public string state { get; set; } public string id { get; set; } }</code>
이는 RootObject
클래스의 알려진 속성 이름이 JSON에 있는 하위 개체의 동적 이름과 일치하지 않기 때문입니다.
해결책은 사용자 지정 변환기를 사용하여 동적 속성 이름을 처리하고 이를 강력한 형식의 개체 사전으로 역직렬화하는 것입니다. 이렇게 하려면 다음이 필요합니다.
JsonConverter
에서 상속하고 역직렬화 및 직렬화 논리를 제공하는 변환기 클래스를 만듭니다.
<code class="language-csharp"> public class TypedExtensionDataConverter<T> : JsonConverter // ... 实现略 ...</code>
[JsonTypedExtensionData]
속성을 사용하여 동적으로 명명된 객체의 사전을 보유할 데이터 모델의 속성을 표시합니다.
<code class="language-csharp"> [JsonConverter(typeof(TypedExtensionDataConverter<User>))] class Users { [JsonProperty("parentname")] public string ParentName { get; set; } [JsonTypedExtensionData] public Dictionary<string, User> UserTable { get; set; } }</code>
동적 하위 개체를 올바르게 처리하도록 업데이트된 데이터 모델:
<code class="language-csharp"> public class RootObject { [JsonProperty("users")] public Users Users { get; set; } }</code>
사용자 지정 변환기를 사용하면 JSON 구조를 강력한 형식의 C# 개체 모델로 성공적으로 역직렬화할 수 있으므로 원본 데이터의 계층 구조와 동적 특성을 보존할 수 있습니다.
위 내용은 C#에서 동적으로 명명된 하위 개체를 사용하여 JSON을 역직렬화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!