EsFields.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. using Nest;
  2. using Newtonsoft.Json.Linq;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Reflection;
  6. using System.Text;
  7. namespace CoreEntity.ESEntity
  8. {
  9. public class EsFields<T>
  10. {
  11. public static T entity(T a, FieldValues fields)
  12. {
  13. a = HitsItem<T>.MapperFields<T>(fields, a);
  14. return a;
  15. }
  16. /// <summary>
  17. /// 反射实现两个类的对象之间相同属性的值的复制
  18. /// 适用于初始化新实体
  19. /// </summary>
  20. /// <typeparam name="D">返回的实体</typeparam>
  21. /// <typeparam name="S">数据源实体</typeparam>
  22. /// <param name="s">数据源实体</param>
  23. /// <returns>返回的新实体</returns>
  24. public static T MapperFields<T>(FieldValues s, T d)
  25. {
  26. try
  27. {
  28. if (s == null) return d;
  29. //获得类型
  30. var Typed = typeof(T);
  31. foreach (PropertyInfo dp in Typed.GetProperties())//获得类型的属性字段
  32. {
  33. if (s[dp.Name] != null && dp.Name != "Error" && dp.Name != "Item")//判断属性名是否相同
  34. {
  35. Object result = null;
  36. if (s[dp.Name].GetType() == typeof(JArray))
  37. {
  38. Object[] token = s.ValuesOf<Object>(new Field(dp.Name));
  39. result = token[0];
  40. if (dp.PropertyType == typeof(DateTime?))
  41. result = HitsItem<T>.ConvertIntDatetime(Convert.ToDouble(result));
  42. else
  43. result = Convert.ChangeType(result, dp.PropertyType);
  44. //JsonConvert.PopulateObject(d);
  45. }
  46. else
  47. {
  48. if (dp.PropertyType == typeof(DateTime?))
  49. result = HitsItem<T>.ConvertIntDatetime(Convert.ToDouble(s[dp.Name]));
  50. else
  51. result = Convert.ChangeType(s[dp.Name], dp.PropertyType);
  52. }
  53. dp.SetValue(d, result, null);//获得s对象属性的值复制给d对象的属性
  54. }
  55. }
  56. }
  57. catch (Exception ex)
  58. {
  59. throw ex;
  60. }
  61. return d;
  62. }
  63. //public static T entityDynamic(T a, FieldValues fields)
  64. //{
  65. // a = HitsItem<T>.MapperFieldsDynamic<T>(fields, a);
  66. // return a;
  67. //}
  68. ///// <summary>
  69. ///// 反射实现两个类的对象之间相同属性的值的复制
  70. ///// 适用于初始化新实体
  71. ///// </summary>
  72. ///// <typeparam name="D">返回的实体</typeparam>
  73. ///// <typeparam name="S">数据源实体</typeparam>
  74. ///// <param name="s">数据源实体</param>
  75. ///// <returns>返回的新实体</returns>
  76. //public static Dictionary<string, JToken> MapperFieldsDynamic<T>(dynamic s, Dictionary<string, JToken> d)
  77. //{
  78. // try
  79. // {
  80. // if (s == null) return d;
  81. // //获得类型
  82. // var Typed = typeof(T);
  83. // foreach (PropertyInfo dp in Typed.GetProperties())//获得类型的属性字段
  84. // {
  85. // if (s[dp.Name] != null && dp.Name != "Error" && dp.Name != "Item")//判断属性名是否相同
  86. // {
  87. // JToken result = null;
  88. // if (s[dp.Name].GetType() == typeof(JArray))
  89. // {
  90. // JArray token = (JArray)s[dp.Name];
  91. // result = token[0];
  92. // if (dp.PropertyType == typeof(DateTime?))
  93. // result = HitsItem<T>.ConvertIntDatetime(Convert.ToDouble(result));
  94. // //else
  95. // // ;
  96. // }
  97. // else
  98. // {
  99. // if (dp.PropertyType == typeof(DateTime?))
  100. // result = HitsItem<T>.ConvertIntDatetime(Convert.ToDouble(s[dp.Name]));
  101. // else
  102. // result = s[dp.Name];
  103. // }
  104. // d.Add(dp.Name, result);//获得s对象属性的值复制给d对象的属性
  105. // }
  106. // }
  107. // }
  108. // catch (Exception ex)
  109. // {
  110. // throw ex;
  111. // }
  112. // return d;
  113. //}
  114. }
  115. }