假设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: 将JsonSerializerSettings的TypeNameHandling设置为All,以便在反序列化的JSON中包含类型信息。
<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中文网其他相关文章!