>백엔드 개발 >C++ >C#에서 동적으로 명명된 하위 개체를 사용하여 JSON을 역직렬화하는 방법은 무엇입니까?

C#에서 동적으로 명명된 하위 개체를 사용하여 JSON을 역직렬화하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2025-01-13 18:52:45765검색

How to Deserialize JSON with Dynamically Named Child Objects in C#?

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에 있는 하위 개체의 동적 이름과 일치하지 않기 때문입니다.

해결책은 사용자 지정 변환기를 사용하여 동적 속성 이름을 처리하고 이를 강력한 형식의 개체 사전으로 역직렬화하는 것입니다. 이렇게 하려면 다음이 필요합니다.

  1. JsonConverter에서 상속하고 역직렬화 및 직렬화 논리를 제공하는 변환기 클래스를 만듭니다.

    <code class="language-csharp"> public class TypedExtensionDataConverter<T> : JsonConverter // ... 实现略 ...</code>
  2. [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>
  3. 동적 하위 개체를 올바르게 처리하도록 업데이트된 데이터 모델:

    <code class="language-csharp"> public class RootObject
     {
         [JsonProperty("users")]
         public Users Users { get; set; }
     }</code>

사용자 지정 변환기를 사용하면 JSON 구조를 강력한 형식의 C# 개체 모델로 성공적으로 역직렬화할 수 있으므로 원본 데이터의 계층 구조와 동적 특성을 보존할 수 있습니다.

위 내용은 C#에서 동적으로 명명된 하위 개체를 사용하여 JSON을 역직렬화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.