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

浏览:31日期:2024-02-16
如何解决将JObject转换成字典。可能吗??

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

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; }}

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

多谢你们!

解决方法

我有一个WebAPI方法,可以将任意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)) ))

谢谢!

相关文章: