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

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

Patricia Arquette
發布: 2025-01-17 13:41:10
原創
555 人瀏覽過

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

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

挑戰:

將複雜的 JSON 資料反序列化為 IEnumerable<BaseType>(其中 BaseType 是抽象的)有困難。 標準 JsonConvert.DeserializeObject() 由於抽象基底類型而失敗。

解:

此解決方案涉及利用 JsonSerializerSettings 及其 TypeNameHandling 屬性。將 TypeNameHandling 設為 All 可確保序列化的 JSON 包含 $type 字段,保留對於反序列化至關重要的類型資訊。

實作步驟:

  1. 配置序列化: 建立一個 JsonSerializerSettings 物件並將 TypeNameHandling 設定為 All
<code class="language-csharp">JsonSerializerSettings settings = new JsonSerializerSettings
{
    TypeNameHandling = TypeNameHandling.All
};</code>
登入後複製
  1. 使用類型資訊進行序列化:使用配置的設定序列化您的物件。 這會將必要的 $type 欄位新增至 JSON 字串。
<code class="language-csharp">string strJson = JsonConvert.SerializeObject(instance, settings);</code>
登入後複製

產生的 JSON 將類似於此(注意 $type 欄位):

<code class="language-json">{
  "$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>
登入後複製
  1. 使用型別資訊反序列化: 使用相同的 IEnumerable<BaseType> 物件將 JSON 字串反序列化回 settings
<code class="language-csharp">IEnumerable<BaseType> deserialized = JsonConvert.DeserializeObject<IEnumerable<BaseType>>(strJson, settings);</code>
登入後複製

相關文件:

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板