颐和api

JsonHelper.cs 4.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. using Newtonsoft.Json;
  2. using Newtonsoft.Json.Converters;
  3. using Newtonsoft.Json.Linq;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Data;
  7. using System.Linq;
  8. namespace MadRunFabric.Common
  9. {
  10. public static class JsonHelper
  11. {
  12. /// <summary>
  13. /// json中的时间格式
  14. /// </summary>
  15. /// <returns></returns>
  16. public static IsoDateTimeConverter TimeFormat()
  17. {
  18. return new IsoDateTimeConverter() { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" };
  19. }
  20. /// <summary>
  21. /// model转json
  22. /// </summary>
  23. public static string ObjectToJson(object obj)
  24. {
  25. //if (obj == null) { throw new Exception("null不能被转为json"); }
  26. return JsonConvert.SerializeObject(obj, TimeFormat());
  27. }
  28. /// <summary>
  29. /// model转xml
  30. /// </summary>
  31. public static string ObjectToXml(object obj, string root_name = "root")
  32. {
  33. var json = ObjectToJson(obj);
  34. var xml_json = "{\"" + root_name + "\":" + json + "}";
  35. var xml = JsonConvert.DeserializeXmlNode(xml_json).OuterXml;
  36. return xml;
  37. }
  38. /// <summary>
  39. /// 比较两个json结构是否相同
  40. /// </summary>
  41. /// <param name="json_1"></param>
  42. /// <param name="json_2"></param>
  43. /// <returns></returns>
  44. public static bool HasSameStructure(string json_1, string json_2)
  45. {
  46. var path_list = new List<string>();
  47. void FindJsonNode(JToken token)
  48. {
  49. if (token == null) { return; }
  50. if (token.Type == JTokenType.Property)
  51. {
  52. path_list.Add(token.Path);
  53. }
  54. //find next node
  55. var children = token.Children();
  56. foreach (var child in children)
  57. {
  58. FindJsonNode(child);
  59. }
  60. }
  61. FindJsonNode(JToken.Parse(json_1));
  62. FindJsonNode(JToken.Parse(json_2));
  63. path_list = path_list.Select(x => ConvertHelper.GetString(x).Trim()).ToList();
  64. //这里其实有bug
  65. //如果一个json是空,另一个是两个a.b.c(虽然不可能出现)
  66. //就会导致两个不一样的json被判断为一样
  67. //介于不太可能发生,就不想改了,什么时候c#内置函数支持ref再改(强迫症=.=)
  68. return path_list.Count == path_list.Distinct().Count() * 2;
  69. }
  70. private static void JsonParseTest(string json)
  71. {
  72. var dom = JObject.Parse(json);
  73. var mk = dom["io"];
  74. var props = dom.Properties();
  75. }
  76. /// <summary>
  77. /// json转model
  78. /// </summary>
  79. public static T JsonToEntity<T>(string json)
  80. {
  81. var b = false;
  82. if (b) { return JsonConvert.DeserializeObject<T>(json); }
  83. return (T)JsonToEntity(json, typeof(T));
  84. }
  85. /// <summary>
  86. /// json转list
  87. /// </summary>
  88. /// <typeparam name="T"></typeparam>
  89. /// <param name="Json"></param>
  90. /// <returns></returns>
  91. public static List<T> JsonToList<T>(this string Json)
  92. {
  93. return Json == null ? null : JsonConvert.DeserializeObject<List<T>>(Json);
  94. }
  95. /// <summary>
  96. /// json解析
  97. /// </summary>
  98. public static object JsonToEntity(string json, Type type)
  99. {
  100. if (!ValidateHelper.IsPlumpString(json)) { throw new Exception("json为空"); }
  101. if (type == null) { throw new Exception("请指定json对应的实体类型"); }
  102. try
  103. {
  104. return JsonConvert.DeserializeObject(json, type);
  105. }
  106. catch (Exception e)
  107. {
  108. throw new Exception($"不能将json转为{type.FullName}。json数据:{json}", e);
  109. }
  110. }
  111. /// <summary>
  112. /// datatable转json
  113. /// </summary>
  114. /// <returns>json</returns>
  115. public static string DataTableToJson(DataTable dt)
  116. {
  117. return JsonConvert.SerializeObject(dt, new DataTableConverter(), TimeFormat());
  118. }
  119. }
  120. }