Dot-Net
如何使用 JSON.NET 反序列化為嵌套/遞歸字典和列表?
我需要將復雜的 JSON blob 反序列化為標準 .NET 容器,以便在不知道 JSON 的程式碼中使用。它期望事物採用標準的 .NET 類型,特別是“對象”可以是原始的或遞歸的(字典或列表)
Dictionary<string, object>。List<object>我不能使用靜態類型來映射結果並且 JObject/JToken 不適合。理想情況下,會有某種方法(也許通過合同?)將原始 JSON 轉換為基本的 .NET 容器。
我一直在尋找任何方法來誘使 JSON.NET 反序列化器在遇到“{}”或“[]”時創建這些簡單類型,但收效甚微。
任何幫助表示讚賞!
你不能按照我的要求去做。至少在經過大量研究後,我無法判斷。我不得不編輯 Json.NET 的原始碼。
如果您只想要一個可以處理任意 JSON 並將其轉換為正常 .NET 類型(原語、列表和字典)的嵌套結構的通用方法,您可以使用 JSON.Net 的LINQ-to-JSON API來實現:
using System.Linq; using Newtonsoft.Json.Linq; public static class JsonHelper { public static object Deserialize(string json) { return ToObject(JToken.Parse(json)); } public static object ToObject(JToken token) { switch (token.Type) { case JTokenType.Object: return token.Children<JProperty>() .ToDictionary(prop => prop.Name, prop => ToObject(prop.Value)); case JTokenType.Array: return token.Select(ToObject).ToList(); default: return ((JValue)token).Value; } } }您可以呼叫如下所示的方法。
obj將包含Dictionary<string, object>、List<object>或原語,具體取決於您開始使用的 JSON。object obj = JsonHelper.Deserialize(jsonString);