Newtonsoft.Json.NET을 사용하여 JSON을 IEnumerable
도전:
복잡한 JSON 데이터를 IEnumerable<BaseType>
이 추상적인 BaseType
으로 역직렬화하는 것은 어렵습니다. 표준 JsonConvert.DeserializeObject
은 추상 기본 유형으로 인해 실패합니다.
해상도:
해결책에는 JsonSerializerSettings
및 해당 TypeNameHandling
속성을 활용하는 것이 포함됩니다. TypeNameHandling
을 All
으로 설정하면 직렬화된 JSON에 $type
필드가 포함되어 역직렬화에 중요한 유형 정보가 보존됩니다.
구현 단계:
JsonSerializerSettings
객체를 생성하고 TypeNameHandling
를 All
으로 설정합니다.<code class="language-csharp">JsonSerializerSettings settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All };</code>
$type
필드가 JSON 문자열에 추가됩니다.<code class="language-csharp">string strJson = JsonConvert.SerializeObject(instance, settings);</code>
결과 JSON은 다음과 유사합니다($type
필드 참고).
<code class="language-json">{ "$type": "System.Collections.Generic.List`1[[MyAssembly.BaseClass, MyAssembly]], mscorlib", "$values": [ { "$id": "1", "$type": "MyAssembly.ClassA, MyAssembly", "Email": "[email'\u00a0protected]" }, { "$id": "2", "$type": "MyAssembly.ClassB, MyAssembly", "Email": "[email'\u00a0protected]" } ] }</code>
IEnumerable<BaseType>
개체를 사용하여 JSON 문자열을 다시 settings
으로 역직렬화합니다.<code class="language-csharp">IEnumerable<BaseType> deserialized = JsonConvert.DeserializeObject<IEnumerable<BaseType>>(strJson, settings);</code>
관련 문서:
위 내용은 Newtonsoft.Json.NET을 사용하여 JSON을 IEnumerable로 역직렬화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!