using Newtonsoft.Json.Linq; using System.Collections.Generic; using System.Linq; namespace Vinno.vCloud.Disk { public static class NewtonsoftExtends { /// /// 获取字符串属性 /// /// /// /// public static string GetJPropertyString(this JToken jToken, string jsonPath, string defaultValue = "") { return GetJPropertyValueByPath(jToken, jsonPath) ?? defaultValue; } /// /// 获取数字型属性 /// /// /// /// public static int GetJPropertyInt(this JToken jToken, string jsonPath, int defaultValue = 0) { var propertyStrinigValue = GetJPropertyString(jToken, jsonPath); int propertyIntValue = 0; if (int.TryParse(propertyStrinigValue, out propertyIntValue)) { return propertyIntValue; } return defaultValue; } /// /// 根据JsonPath获取json值 /// /// /// /// /// public static T GetJPropertyValueByPath(this JToken jToken, string jsonPath) { var childJToken = jToken.SelectToken(jsonPath); if (childJToken != null) { return childJToken.Value(); } return default(T); } /// /// 根据JsonPath获取json值 /// /// /// /// /// public static IEnumerable GetJPropertyCollectionsValueByPath(this JToken jToken, string jsonPath) { var childJToken = jToken.SelectToken(jsonPath); if (childJToken != null) { return childJToken.Values(); } return default(IEnumerable); } /// /// 设置Json对象值 /// /// /// /// /// public static void SetPropertyValue(this JToken jToken, string name, T value) { jToken.Replace(new JProperty(name, value)); } /// /// 设置Json对象值根据JsonPath /// /// /// /// /// public static void SetPropertyValue(this JToken jToken, string name, T value, string jsonPath) { var parentJToken = jToken.SelectToken(jsonPath); if (parentJToken != null) { var childJToken = parentJToken.FirstOrDefault(child => ((JProperty)child).Name == name); if (childJToken != null) { if (value is string && string.IsNullOrWhiteSpace(value as string)) { return; } childJToken.Replace(new JProperty(name, value)); } else { ((JObject)parentJToken).Add(name, JToken.FromObject(value)); } } } /// /// 获取所有子节点 /// /// /// /// public static IEnumerable GetAllChildren(this JToken jToken, string jsonPath) { var parentJToken = jToken.SelectToken(jsonPath); if (parentJToken == null) { return null; } return parentJToken.Children(); } /// /// 添加子节点 /// /// /// /// /// public static void AddChild(this JObject jObject, string name, T value) { if (jObject.ContainsKey(name)) { var findChild = jObject.Children().Where(child => ((JProperty)child).Name == name).FirstOrDefault(); findChild.Replace(new JProperty(name, value)); } else { jObject.Add(name, JToken.FromObject(value)); } } } }