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
TypeNameHandling を有効にする: 逆シリアル化された JSON に型情報を含めるには、JsonSerializerSettings の TypeNameHandling を All に設定します。
<code> JsonSerializerSettings settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All };</code>
シリアル化された JSON: 構成された設定を使用してオブジェクトのリストをシリアル化します。
<code> string strJson = JsonConvert.SerializeObject(instance, settings);</code>
変更された 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>
JSON の逆シリアル化: TypeNameHandling を有効にした設定を使用して、変更された JSON を基本クラスに逆シリアル化します。
<code> IEnumerable<BaseClass> obj = JsonConvert.DeserializeObject<IEnumerable<BaseClass>>(strJson, settings);</code>
これらの手順に従うことで、多態性型のオブジェクトを含む JSON を IEnumerable
以上がNewtonsoft JSON.NET を使用して JSON を「IEnumerable」に逆シリアル化する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。