using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; public static class JObjectExtensions { /// /// 将JObject转化成字典 /// /// /// public static Dictionary ToDictionary(this JToken json) { var propertyValuePairs = json.ToObject>(); ProcessJObjectProperties(propertyValuePairs); ProcessJArrayProperties(propertyValuePairs); return propertyValuePairs; } private static void ProcessJObjectProperties(Dictionary propertyValuePairs) { var objectPropertyNames = (from property in propertyValuePairs let propertyName = property.Key let value = property.Value where value is JObject select propertyName).ToList(); objectPropertyNames.ForEach(propertyName => propertyValuePairs[propertyName] = ToDictionary((JObject)propertyValuePairs[propertyName])); } private static void ProcessJArrayProperties(Dictionary propertyValuePairs) { var arrayPropertyNames = (from property in propertyValuePairs let propertyName = property.Key let value = property.Value where value is JArray select propertyName).ToList(); arrayPropertyNames.ForEach(propertyName => propertyValuePairs[propertyName] = ToArray((JArray)propertyValuePairs[propertyName])); } /// /// /// /// /// public static object[] ToArray(this JArray array) { return array.ToObject().Select(ProcessArrayEntry).ToArray(); } private static object ProcessArrayEntry(object value) { if (value is JObject) { return ToDictionary((JObject)value); } if (value is JArray) { return ToArray((JArray)value); } return value; } }