我需要将一个复杂的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);