NewtonsoftExtends.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. using Newtonsoft.Json.Linq;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. namespace Vinno.vCloud.Disk
  5. {
  6. public static class NewtonsoftExtends
  7. {
  8. /// <summary>
  9. /// 获取字符串属性
  10. /// </summary>
  11. /// <param name="jToken"></param>
  12. /// <param name="jsonPath"></param>
  13. /// <returns></returns>
  14. public static string GetJPropertyString(this JToken jToken, string jsonPath, string defaultValue = "")
  15. {
  16. return GetJPropertyValueByPath<string>(jToken, jsonPath) ?? defaultValue;
  17. }
  18. /// <summary>
  19. /// 获取数字型属性
  20. /// </summary>
  21. /// <param name="jToken"></param>
  22. /// <param name="jsonPath"></param>
  23. /// <returns></returns>
  24. public static int GetJPropertyInt(this JToken jToken, string jsonPath, int defaultValue = 0)
  25. {
  26. var propertyStrinigValue = GetJPropertyString(jToken, jsonPath);
  27. int propertyIntValue = 0;
  28. if (int.TryParse(propertyStrinigValue, out propertyIntValue))
  29. {
  30. return propertyIntValue;
  31. }
  32. return defaultValue;
  33. }
  34. /// <summary>
  35. /// 根据JsonPath获取json值
  36. /// </summary>
  37. /// <typeparam name="T"></typeparam>
  38. /// <param name="jToken"></param>
  39. /// <param name="jsonPath"></param>
  40. /// <returns></returns>
  41. public static T GetJPropertyValueByPath<T>(this JToken jToken, string jsonPath)
  42. {
  43. var childJToken = jToken.SelectToken(jsonPath);
  44. if (childJToken != null)
  45. {
  46. return childJToken.Value<T>();
  47. }
  48. return default(T);
  49. }
  50. /// <summary>
  51. /// 根据JsonPath获取json值
  52. /// </summary>
  53. /// <typeparam name="T"></typeparam>
  54. /// <param name="jToken"></param>
  55. /// <param name="jsonPath"></param>
  56. /// <returns></returns>
  57. public static IEnumerable<T> GetJPropertyCollectionsValueByPath<T>(this JToken jToken, string jsonPath)
  58. {
  59. var childJToken = jToken.SelectToken(jsonPath);
  60. if (childJToken != null)
  61. {
  62. return childJToken.Values<T>();
  63. }
  64. return default(IEnumerable<T>);
  65. }
  66. /// <summary>
  67. /// 设置Json对象值
  68. /// </summary>
  69. /// <typeparam name="T"></typeparam>
  70. /// <param name="jToken"></param>
  71. /// <param name="name"></param>
  72. /// <param name="value"></param>
  73. public static void SetPropertyValue<T>(this JToken jToken, string name, T value)
  74. {
  75. jToken.Replace(new JProperty(name, value));
  76. }
  77. /// <summary>
  78. /// 设置Json对象值根据JsonPath
  79. /// </summary>
  80. /// <typeparam name="T"></typeparam>
  81. /// <param name="jToken"></param>
  82. /// <param name="name"></param>
  83. /// <param name="value"></param>
  84. public static void SetPropertyValue<T>(this JToken jToken, string name, T value, string jsonPath)
  85. {
  86. var parentJToken = jToken.SelectToken(jsonPath);
  87. if (parentJToken != null)
  88. {
  89. var childJToken = parentJToken.FirstOrDefault(child => ((JProperty)child).Name == name);
  90. if (childJToken != null)
  91. {
  92. if (value is string && string.IsNullOrWhiteSpace(value as string))
  93. {
  94. return;
  95. }
  96. childJToken.Replace(new JProperty(name, value));
  97. }
  98. else
  99. {
  100. ((JObject)parentJToken).Add(name, JToken.FromObject(value));
  101. }
  102. }
  103. }
  104. /// <summary>
  105. /// 获取所有子节点
  106. /// </summary>
  107. /// <param name="jToken"></param>
  108. /// <param name="jsonPath"></param>
  109. /// <returns></returns>
  110. public static IEnumerable<JToken> GetAllChildren(this JToken jToken, string jsonPath)
  111. {
  112. var parentJToken = jToken.SelectToken(jsonPath);
  113. if (parentJToken == null) { return null; }
  114. return parentJToken.Children();
  115. }
  116. /// <summary>
  117. /// 添加子节点
  118. /// </summary>
  119. /// <typeparam name="T"></typeparam>
  120. /// <param name="jObject"></param>
  121. /// <param name="name"></param>
  122. /// <param name="value"></param>
  123. public static void AddChild<T>(this JObject jObject, string name, T value)
  124. {
  125. if (jObject.ContainsKey(name))
  126. {
  127. var findChild = jObject.Children().Where(child => ((JProperty)child).Name == name).FirstOrDefault();
  128. findChild.Replace(new JProperty(name, value));
  129. }
  130. else
  131. {
  132. jObject.Add(name, JToken.FromObject(value));
  133. }
  134. }
  135. }
  136. }