.net - 如何使用 JSON.NET 反序列化为嵌套/递归字典和列表?

我需要将复杂的 JSON blob 反序列化为标准 .NET 容器,以便在不了解 JSON 的代码中使用。它期望事物采用标准的 .NET 类型,特别是 Dictionary<string, object>List<object>其中“对象”可以是原始的或递归的(字典或列表)。

我不能使用静态类型来映射结果并且 JObject/JToken 不适合。理想情况下,应该有某种方法(也许是通过契约(Contract)?)将原始 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);

https://stackoverflow.com/questions/5546142/

相关文章:

c# - 检测反序列化对象是否缺少 Json.NET 中 JsonConvert 类的字段

json - 是否为 null 有效 JSON(4 字节,仅此而已)

json - Swift 中对象的自动 JSON 序列化和反序列化

json - IE9 JSON 数据 "do you want to open or save th

wcf - DataContractJsonSerializer 和枚举

python - 通过url获取json数据并在python中使用(simplejson)

asp.net-mvc - ASP.NET MVC 2 - jquery ajax 响应失败

javascript - 如何让 AngularJS 输出转义 HTML

javascript - jQuery AJAX 调用带有 JSON 返回的 PHP 脚本

javascript - 从 JSON 对象中删除元素