假設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中文網其他相關文章!