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));
}
}
}
}