首页 >后端开发 >C++ >如何使用 Newtonsoft.Json.NET 将 JSON 反序列化为 IEnumerable?

如何使用 Newtonsoft.Json.NET 将 JSON 反序列化为 IEnumerable?

Patricia Arquette
Patricia Arquette原创
2025-01-17 13:41:10556浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn