我最终使用了两个答案的混合,因为没有一个真正地钉住它。
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; }}
它可能在某些极端情况下无法正常工作,并且性能不是其最强的质量。
多谢你们!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)