如何使用JSON.NET反序列化为嵌套/递归词典和列表?
发布时间:2020-12-16 19:46:55 所属栏目:百科 来源:网络整理
导读:我需要将一个复杂的JSON blob反序列化为标准的.NET容器,用于不知道JSON的代码。它期望的东西是标准的.NET类型,特别是Dictionary [string,object]或List [object],其中“object”可以是原始的或递归的(Dictionary或List)。 我不能使用静态类型映射结果和J
我需要将一个复杂的JSON blob反序列化为标准的.NET容器,用于不知道JSON的代码。它期望的东西是标准的.NET类型,特别是Dictionary [string,object]或List [object],其中“object”可以是原始的或递归的(Dictionary或List)。
我不能使用静态类型映射结果和JObject / JToken不适合。理想情况下,将原始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)); } private 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); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |