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