将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;
}
}
它可能在某些极端情况下无法正常工作,并且性能不是其最强的质量。
多谢你们!
解决方法
我有一个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))
)
)
谢谢!
你可能想看: