首頁 >後端開發 >C++ >如何使用 Newtonsoft JSON.NET 將 JSON 反序列化為「IEnumerable」?

如何使用 Newtonsoft JSON.NET 將 JSON 反序列化為「IEnumerable」?

Linda Hamilton
Linda Hamilton原創
2025-01-17 13:48:11921瀏覽

How to Deserialize JSON into an `IEnumerable` using Newtonsoft JSON.NET?

使用Newtonsoft JSON.NET將JSON反序列化為IEnumerable

假設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

要將JSON反序列化為IEnumerable,請依照下列步驟操作:

  1. 啟用TypeNameHandling: 將JsonSerializerSettings的TypeNameHandling設定為All,以便在反序列化的JSON中包含類型資訊。

    <code> JsonSerializerSettings settings = new JsonSerializerSettings
     {
         TypeNameHandling = TypeNameHandling.All
     };</code>
  2. 序列化JSON: 使用已配置的設定序列化物件清單。

    <code> string strJson = JsonConvert.SerializeObject(instance, settings);</code>
  3. 修改後的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>
  4. 反序列化JSON: 使用啟用了TypeNameHandling的設定將修改後的JSON反序列化為基底類別。

    <code> IEnumerable<BaseClass> obj = JsonConvert.DeserializeObject<IEnumerable<BaseClass>>(strJson, settings);</code>

透過依照這些步驟,您可以成功地將JSON反序列化為IEnumerable,包括具有多型別類型的物件。

以上是如何使用 Newtonsoft JSON.NET 將 JSON 反序列化為「IEnumerable」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn