我有一个Web API方法,可以将任意json有效内容接受到JObject属性中。因此,我不知道会发生什么,但是我仍然需要将其转换为.NET类型。我想拥有一个Dictionary<string,object>以便可以按我想要的任何方式处理它。
JObject
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; } }
它可能在某些极端情况下无法正常工作,并且性能不是其最强的质量。
多谢你们!