使用 Newtonsoft.Json.NET 将 JSON 反序列化为 IEnumerable
挑战:
将复杂的 JSON 数据反序列化为 IEnumerable<BaseType>
(其中 BaseType
是抽象的)存在困难。 标准 JsonConvert.DeserializeObject
由于抽象基类型而失败。
解决方案:
该解决方案涉及利用 JsonSerializerSettings
及其 TypeNameHandling
属性。将 TypeNameHandling
设置为 All
可确保序列化的 JSON 包含 $type
字段,保留对于反序列化至关重要的类型信息。
实施步骤:
JsonSerializerSettings
对象并将 TypeNameHandling
设置为 All
。<code class="language-csharp">JsonSerializerSettings settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All };</code>
$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>
IEnumerable<BaseType>
对象将 JSON 字符串反序列化回 settings
。<code class="language-csharp">IEnumerable<BaseType> deserialized = JsonConvert.DeserializeObject<IEnumerable<BaseType>>(strJson, settings);</code>
相关文档:
以上是如何使用 Newtonsoft.Json.NET 将 JSON 反序列化为 IEnumerable?的详细内容。更多信息请关注PHP中文网其他相关文章!