加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何使用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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读