BaseType이 추상 클래스인 경우 JsonConvert.Deserialize를 사용하여 JSON 데이터를 IEnumerable
질문:
다음 JSON을 고려하세요.
<code>[ { "$id": "1", "$type": "MyAssembly.ClassA, MyAssembly", "Email": "[email\u00a0protected]" }, { "$id": "2", "$type": "MyAssembly.ClassB, MyAssembly", "Email": "[email\u00a0protected]" } ]</code>
및 다음 추상 기본 및 파생 클래스:
<code>public abstract class BaseClass { public string Email; } public class ClassA : BaseClass { } public class ClassB : BaseClass { }</code>
JSON을 역직렬화하려고 할 때:
<code>IEnumerable<基类> deserialized;</code>
JsonConvert.Deserialize
해결책:
이 문제를 해결하려면 JsonSerializerSettings의 TypeNameHandling 설정을 사용하세요. 이 설정을 TypeNameHandling.All로 설정하면 유형 정보가 역직렬화된 JSON에 포함됩니다.
<code>JsonSerializerSettings settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All }; string strJson = JsonConvert.SerializeObject(instance, settings);</code>
업데이트된 JSON:
<code>{ "$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>
이제 유형 정보를 포함하면 역직렬화가 올바르게 수행됩니다.
<code>IEnumerable<BaseClass> obj = JsonConvert.DeserializeObject<IEnumerable<BaseClass>>(strJson, settings);</code>
위 내용은 BaseType이 Abstract인 경우 Newtonsoft JSON.NET을 사용하여 JSON을 IEnumerable로 역직렬화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!