Extensions.cs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  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.Linq;
  9. using System.Reflection;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. namespace WCS_Client
  13. {
  14. /// <summary>
  15. /// 扩展.json序列反序列化
  16. /// </summary>
  17. public static partial class Extensions
  18. {
  19. /// <summary>
  20. /// 转成json对象
  21. /// </summary>
  22. /// <param name="Json">json字串</param>
  23. /// <returns></returns>
  24. public static object ToJson(this string Json)
  25. {
  26. return Json == null ? null : JsonConvert.DeserializeObject(Json);
  27. }
  28. /// <summary>
  29. /// 转成json字串
  30. /// </summary>
  31. /// <param name="obj">对象</param>
  32. /// <returns></returns>
  33. public static string ToJson(this object obj)
  34. {
  35. var timeConverter = new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" };
  36. return JsonConvert.SerializeObject(obj, timeConverter);
  37. }
  38. /// <summary>
  39. /// 转成json字串
  40. /// </summary>
  41. /// <param name="obj">对象</param>
  42. /// <param name="datetimeformats">时间格式化</param>
  43. /// <returns></returns>
  44. public static string ToJson(this object obj, string datetimeformats)
  45. {
  46. var timeConverter = new IsoDateTimeConverter { DateTimeFormat = datetimeformats };
  47. return JsonConvert.SerializeObject(obj, timeConverter);
  48. }
  49. /// <summary>
  50. /// 字串反序列化成指定对象实体
  51. /// </summary>
  52. /// <typeparam name="T">实体类型</typeparam>
  53. /// <param name="Json">字串</param>
  54. /// <returns></returns>
  55. public static T ToObject<T>(this string Json)
  56. {
  57. return Json == null ? default(T) : JsonConvert.DeserializeObject<T>(Json);
  58. }
  59. /// <summary>
  60. /// 字串反序列化成指定对象实体(列表)
  61. /// </summary>
  62. /// <typeparam name="T">实体类型</typeparam>
  63. /// <param name="Json">字串</param>
  64. /// <returns></returns>
  65. public static List<T> ToList<T>(this string Json)
  66. {
  67. return Json == null ? null : JsonConvert.DeserializeObject<List<T>>(Json);
  68. }
  69. /// <summary>
  70. /// 字串反序列化成DataTable
  71. /// </summary>
  72. /// <param name="Json">字串</param>
  73. /// <returns></returns>
  74. public static DataTable ToTable(this string Json)
  75. {
  76. return Json == null ? null : JsonConvert.DeserializeObject<DataTable>(Json);
  77. }
  78. /// <summary>
  79. /// 字串反序列化成linq对象
  80. /// </summary>
  81. /// <param name="Json">字串</param>
  82. /// <returns></returns>
  83. public static JObject ToJObject(this string Json)
  84. {
  85. return Json == null ? JObject.Parse("{}") : JObject.Parse(Json.Replace("&nbsp;", ""));
  86. }
  87. public static DataTable GetAttributesDataTable(this object obj)
  88. {
  89. var tb = new DataTable(obj.GetType().Name);
  90. tb.Columns.Add("信号说明", typeof(string));
  91. tb.Columns.Add("信号名称", typeof(string));
  92. tb.Columns.Add("信号值", typeof(string));
  93. Type t = obj.GetType();
  94. //属性遍历
  95. foreach (System.Reflection.PropertyInfo pi in t.GetProperties())
  96. {
  97. AttributeCollection attributes = TypeDescriptor.GetProperties(t)[pi.Name].Attributes;
  98. DescriptionAttribute myAttribute = (DescriptionAttribute)attributes[typeof(DescriptionAttribute)];
  99. string describle = myAttribute.Description;
  100. string proname = pi.Name;
  101. var abc = pi.GetValue(obj, null);
  102. var values = new object[3];
  103. values[0] = describle;
  104. values[1] = proname;
  105. values[2] = abc;
  106. tb.Rows.Add(values);
  107. }
  108. return tb;
  109. }
  110. /// <summary>
  111. /// 扩展方法,获得枚举的Description
  112. /// </summary>
  113. /// <param name="value">枚举值</param>
  114. /// <param name="nameInstead">当枚举值没有定义DescriptionAttribute,是否使用枚举名代替,默认是使用</param>
  115. /// <returns>枚举的Description</returns>
  116. public static string GetDescription(this Enum value, Boolean nameInstead = true)
  117. {
  118. Type type = value.GetType();
  119. string name = Enum.GetName(type, value);
  120. if (name == null)
  121. {
  122. return null;
  123. }
  124. FieldInfo field = type.GetField(name);
  125. DescriptionAttribute attribute = System.Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute)) as DescriptionAttribute;
  126. if (attribute == null && nameInstead == true)
  127. {
  128. return name;
  129. }
  130. return attribute?.Description;
  131. }
  132. }
  133. }