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

前端之家收集整理的这篇文章主要介绍了如何使用JSON.NET反序列化为嵌套/递归词典和列表?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要将一个复杂的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);

猜你在找的Json相关文章