>백엔드 개발 >C++ >Newtonsoft JSON.NET을 사용하여 JSON을 'IEnumerable'로 역직렬화하는 방법은 무엇입니까?

Newtonsoft JSON.NET을 사용하여 JSON을 'IEnumerable'로 역직렬화하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2025-01-17 13:48:11921검색

How to Deserialize JSON into an `IEnumerable` using Newtonsoft JSON.NET?

Newtonsoft JSON.NET을 사용하여 JSON을 IEnumerable<기본 클래스>로 역직렬화합니다.

JSON이 다형성 유형의 객체 목록을 나타낸다고 가정합니다.

<code>[
  {
    "$id": "1",
    "$type": "MyAssembly.ClassA, MyAssembly",
    "Email": "[email protected]"
  },
  {
    "$id": "2",
    "$type": "MyAssembly.ClassB, MyAssembly",
    "Email": "[email protected]"
  }
]</code>

및 추상 기본 및 파생 클래스:

<code>public abstract class BaseClass
{
    public string Email;
}
public class ClassA : BaseClass
{
}
public class ClassB : BaseClass
{
}</code>

JSON을 IEnumerable<기본 클래스>로 역직렬화

JSON을 IEnumerable로 역직렬화하려면 다음 단계를 따르세요.

  1. TypeNameHandling 활성화: 역직렬화된 JSON에 유형 정보를 포함하려면 JsonSerializerSettings의 TypeNameHandling을 All로 설정합니다.

    <code> JsonSerializerSettings settings = new JsonSerializerSettings
     {
         TypeNameHandling = TypeNameHandling.All
     };</code>
  2. 직렬화된 JSON: 구성된 설정을 사용하여 개체 목록을 직렬화합니다.

    <code> string strJson = JsonConvert.SerializeObject(instance, settings);</code>
  3. 수정된 JSON: 직렬화된 JSON에는 $type 정보가 포함되며 생성된 JSON은 다음과 같습니다.

    <code> {
       "$type": "System.Collections.Generic.List`1[[MyAssembly.BaseClass, MyAssembly]], mscorlib",
       "$values": [
         {
           "$id": "1",
           "$type": "MyAssembly.ClassA, MyAssembly",
           "Email": "[email protected]"
         },
         {
           "$id": "2",
           "$type": "MyAssembly.ClassB, MyAssembly",
           "Email": "[email protected]"
         }
       ]
     }</code>
  4. JSON 역직렬화: TypeNameHandling이 활성화된 설정을 사용하여 수정된 JSON을 기본 클래스로 역직렬화합니다.

    <code> IEnumerable<BaseClass> obj = JsonConvert.DeserializeObject<IEnumerable<BaseClass>>(strJson, settings);</code>

이러한 단계를 수행하면 다형성 유형의 객체를 포함하여 JSON을 IEnumerable로 성공적으로 역직렬화할 수 있습니다.

위 내용은 Newtonsoft JSON.NET을 사용하여 JSON을 'IEnumerable'로 역직렬화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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