当前位置: 首页 > 面试题库 >

将JObject转换成字典。可能吗?

吕征
2023-03-14
问题内容

我有一个Web
API方法,可以将任意json有效内容接受到JObject属性中。因此,我不知道会发生什么,但是我仍然需要将其转换为.NET类型。我想拥有一个Dictionary<string,object>以便可以按我想要的任何方式处理它。

我进行了很多搜索,但找不到任何东西,最终启动了一个麻烦的方法来进行此转换,一个键一个键,一个值一个值。有简单的方法吗?

输入->

JObject person = new JObject(
    new JProperty("Name", "John Smith"),
    new JProperty("BirthDate", new DateTime(1983, 3, 20)),
    new JProperty("Hobbies", new JArray("Play football", "Programming")),
    new JProperty("Extra", new JObject(
        new JProperty("Foo", 1),
        new JProperty("Bar", new JArray(1, 2, 3))
    )
)

谢谢!


问题答案:

我最终使用了两个答案的混合,因为没有一个真正地钉住它。

ToObject()可以在JSON对象中执行第一级属性,但是嵌套对象不会转换为Dictionary()。

也不需要手动完成所有操作,因为ToObject()的第一级属性非常好。

这是代码:

public static class JObjectExtensions
{
    public static IDictionary<string, object> ToDictionary(this JObject @object)
    {
        var result = @object.ToObject<Dictionary<string, object>>();

        var JObjectKeys = (from r in result
                           let key = r.Key
                           let value = r.Value
                           where value.GetType() == typeof(JObject)
                           select key).ToList();

        var JArrayKeys = (from r in result
                          let key = r.Key
                          let value = r.Value
                          where value.GetType() == typeof(JArray)
                          select key).ToList();

        JArrayKeys.ForEach(key => result[key] = ((JArray)result[key]).Values().Select(x => ((JValue)x).Value).ToArray());
        JObjectKeys.ForEach(key => result[key] = ToDictionary(result[key] as JObject));

        return result;
    }
}

它可能在某些极端情况下无法正常工作,并且性能不是其最强的质量。

多谢你们!



 类似资料:
  • 问题内容: 我在python中有一个命名的tuple类 我想将Town实例转换成字典。我不希望它与城镇中字段的名称或数量严格相关。 有没有一种方法可以编写它,以便我可以添加更多字段,或者传入完全不同的命名元组并获得字典。 我无法更改其他人代码中的原始类定义。因此,我需要以一个Town实例为例,并将其转换为字典。 问题答案: TL; DR:为此提供了一种方法。 这是用法的演示: 这是一个已记录的na

  • 问题内容: 我一直在寻找有关此问题的答案,但似乎无法找到答案。也许到了傍晚才找出答案,所以我转向这里的优秀读者。 我从CouchDB记录中提取了以下JSON数据: 此数据存储在Python字典中,该字典位于称为“ ” 的字典中键“ ” 下。我想将此数据从CouchDB转换为Python dict,以便可以在Django模板中执行以下操作: 我发现了很多有关将字典转换为JSON的信息,但是没有其他方

  • 本文向大家介绍sqlalchemy 将结果转换成字典,包括了sqlalchemy 将结果转换成字典的使用技巧和注意事项,需要的朋友参考一下 示例 在SQLAlchemy核心中,结果为RowProxy。如果您需要显式词典,可以致电dict(row)。 首先为示例进行设置: 然后从结果行创建字典:            

  • 问题内容: 例如: 字典将包含以下内容: 在Swift中有可能吗? 我是否可以访问像字典这样的类,例如可能使用: 或类似的东西? 谢谢。 问题答案: 您只需将计算属性添加到您的属性中即可返回带有您的值的。请注意,Swift本机字典类型没有任何称为的方法。您需要将您强制转换为: 您还可以按照@ColGraff发布的链接答案中的建议扩展协议,以使其对所有结构通用:

  • 问题内容: 我有一个这样的元组列表: 我想在第一项中遍历此键,因此,例如,我可以打印如下内容: 我该如何在不保持项目跟踪第一个项目是否与我在元组周围循环相同的情况下进行此操作?感觉很乱(而且我必须先对列表进行排序)… 问题答案: 产生:

  • 问题内容: 假设你有: 产生以下字典的最简单方法是什么? 问题答案: 像这样: Voila 成对的·构造函数和·函数非常有用: