JsonExtensions.cs 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  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.ComponentModel;
  7. using System.Data;
  8. using System.Text.RegularExpressions;
  9. namespace WCS_Client
  10. {
  11. /// <summary>
  12. /// 扩展.json序列反序列化
  13. /// </summary>
  14. public static partial class JsonExtensions
  15. {
  16. /// <summary>
  17. /// 转成json对象
  18. /// </summary>
  19. /// <param name="Json">json字串</param>
  20. /// <returns></returns>
  21. public static object ToJson(this string Json)
  22. {
  23. return Json == null ? null : JsonConvert.DeserializeObject(Json);
  24. }
  25. /// <summary>
  26. /// 转成json字串
  27. /// </summary>
  28. /// <param name="obj">对象</param>
  29. /// <returns></returns>
  30. public static string ToJson(this object obj)
  31. {
  32. var timeConverter = new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" };
  33. return JsonConvert.SerializeObject(obj, timeConverter);
  34. }
  35. /// <summary>
  36. /// 转成json字串
  37. /// </summary>
  38. /// <param name="obj">对象</param>
  39. /// <param name="datetimeformats">时间格式化</param>
  40. /// <returns></returns>
  41. public static string ToJson(this object obj, string datetimeformats)
  42. {
  43. var timeConverter = new IsoDateTimeConverter { DateTimeFormat = datetimeformats };
  44. return JsonConvert.SerializeObject(obj, timeConverter);
  45. }
  46. /// <summary>
  47. /// 字串反序列化成指定对象实体
  48. /// </summary>
  49. /// <typeparam name="T">实体类型</typeparam>
  50. /// <param name="Json">字串</param>
  51. /// <returns></returns>
  52. public static T ToObject<T>(this string Json)
  53. {
  54. return Json == null ? default(T) : JsonConvert.DeserializeObject<T>(Json);
  55. }
  56. /// <summary>
  57. /// 字串反序列化成指定对象实体(列表)
  58. /// </summary>
  59. /// <typeparam name="T">实体类型</typeparam>
  60. /// <param name="Json">字串</param>
  61. /// <returns></returns>
  62. public static List<T> ToList<T>(this string Json)
  63. {
  64. return Json == null ? null : JsonConvert.DeserializeObject<List<T>>(Json);
  65. }
  66. /// <summary>
  67. /// 字串反序列化成DataTable
  68. /// </summary>
  69. /// <param name="Json">字串</param>
  70. /// <returns></returns>
  71. public static DataTable ToTable(this string Json)
  72. {
  73. return Json == null ? null : JsonConvert.DeserializeObject<DataTable>(Json);
  74. }
  75. /// <summary>
  76. /// 字串反序列化成linq对象
  77. /// </summary>
  78. /// <param name="Json">字串</param>
  79. /// <returns></returns>
  80. public static JObject ToJObject(this string Json)
  81. {
  82. return Json == null ? JObject.Parse("{}") : JObject.Parse(Json.Replace("&nbsp;", ""));
  83. }
  84. public static DataTable GetAttributesDataTable(this object obj)
  85. {
  86. var tb = new DataTable(obj.GetType().Name);
  87. tb.Columns.Add("信号说明", typeof(string));
  88. tb.Columns.Add("信号名称", typeof(string));
  89. tb.Columns.Add("信号值", typeof(string));
  90. Type t = obj.GetType();
  91. //属性遍历
  92. foreach (System.Reflection.PropertyInfo pi in t.GetProperties())
  93. {
  94. AttributeCollection attributes = TypeDescriptor.GetProperties(t)[pi.Name].Attributes;
  95. DescriptionAttribute myAttribute = (DescriptionAttribute)attributes[typeof(DescriptionAttribute)];
  96. string describle = myAttribute.Description;
  97. string proname = pi.Name;
  98. var abc = pi.GetValue(obj, null);
  99. var values = new object[3];
  100. values[0] = describle;
  101. values[1] = proname;
  102. //switch (proname)
  103. //{
  104. // case "TaskID":
  105. // values[1] = "任务号";
  106. // break;
  107. // case "TaskType":
  108. // values[1] = "任务类型";
  109. // break;
  110. // case "WorkMode":
  111. // values[1] = "运行模式";
  112. // break;
  113. // case "SystemStatus":
  114. // values[1] = "运行状态";
  115. // break;
  116. // case "StartPosition":
  117. // values[1] = "起始地址";
  118. // break;
  119. // case "PH_Status":
  120. // values[1] = "光电信号";
  121. // break;
  122. // case "DestPosition":
  123. // values[1] = "目标地址";
  124. // break;
  125. // //case "ACT_V":
  126. // // values[1] = "实际速度";
  127. // // break;
  128. // case "GOODSSTART":
  129. // values[1] = "起始地址";
  130. // break;
  131. // case "GOODSEND":
  132. // values[1] = "目标地址";
  133. // break;
  134. // case "REQUEST":
  135. // values[1] = "请求";
  136. // break;
  137. // case "RES1":
  138. // values[1] = "手动入库";
  139. // break;
  140. // case "HEIGHT":
  141. // values[1] = "高度";
  142. // break;
  143. // case "GOODSCODE":
  144. // values[1] = "货物编码";
  145. // break;
  146. // case "GOODSTYPE":
  147. // values[1] = "货物类型";
  148. // break;
  149. // case "GOODSSIZE":
  150. // values[1] = "货物尺寸";
  151. // break;
  152. // case "PH_STATUS":
  153. // values[1] = "光电信号";
  154. // break;
  155. // case "TASKNUM":
  156. // values[1] = "任务号";
  157. // break;
  158. //}
  159. //string P_regex = "^[\u4E00-\u9FA5]{0,}$";
  160. //var match = Regex.IsMatch(values[1].ToString(), P_regex, RegexOptions.IgnoreCase);
  161. //if (!match) continue;
  162. values[2] = abc;
  163. tb.Rows.Add(values);
  164. }
  165. return tb;
  166. }
  167. }
  168. }