using Nest; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Reflection; using System.Text; namespace CoreEntity.ESEntity { public class EsFields { public static T entity(T a, FieldValues fields) { a = HitsItem.MapperFields(fields, a); return a; } /// /// 反射实现两个类的对象之间相同属性的值的复制 /// 适用于初始化新实体 /// /// 返回的实体 /// 数据源实体 /// 数据源实体 /// 返回的新实体 public static T MapperFields(FieldValues s, T d) { try { if (s == null) return d; //获得类型 var Typed = typeof(T); foreach (PropertyInfo dp in Typed.GetProperties())//获得类型的属性字段 { if (s[dp.Name] != null && dp.Name != "Error" && dp.Name != "Item")//判断属性名是否相同 { Object result = null; if (s[dp.Name].GetType() == typeof(JArray)) { Object[] token = s.ValuesOf(new Field(dp.Name)); result = token[0]; if (dp.PropertyType == typeof(DateTime?)) result = HitsItem.ConvertIntDatetime(Convert.ToDouble(result)); else result = Convert.ChangeType(result, dp.PropertyType); //JsonConvert.PopulateObject(d); } else { if (dp.PropertyType == typeof(DateTime?)) result = HitsItem.ConvertIntDatetime(Convert.ToDouble(s[dp.Name])); else result = Convert.ChangeType(s[dp.Name], dp.PropertyType); } dp.SetValue(d, result, null);//获得s对象属性的值复制给d对象的属性 } } } catch (Exception ex) { throw ex; } return d; } //public static T entityDynamic(T a, FieldValues fields) //{ // a = HitsItem.MapperFieldsDynamic(fields, a); // return a; //} ///// ///// 反射实现两个类的对象之间相同属性的值的复制 ///// 适用于初始化新实体 ///// ///// 返回的实体 ///// 数据源实体 ///// 数据源实体 ///// 返回的新实体 //public static Dictionary MapperFieldsDynamic(dynamic s, Dictionary d) //{ // try // { // if (s == null) return d; // //获得类型 // var Typed = typeof(T); // foreach (PropertyInfo dp in Typed.GetProperties())//获得类型的属性字段 // { // if (s[dp.Name] != null && dp.Name != "Error" && dp.Name != "Item")//判断属性名是否相同 // { // JToken result = null; // if (s[dp.Name].GetType() == typeof(JArray)) // { // JArray token = (JArray)s[dp.Name]; // result = token[0]; // if (dp.PropertyType == typeof(DateTime?)) // result = HitsItem.ConvertIntDatetime(Convert.ToDouble(result)); // //else // // ; // } // else // { // if (dp.PropertyType == typeof(DateTime?)) // result = HitsItem.ConvertIntDatetime(Convert.ToDouble(s[dp.Name])); // else // result = s[dp.Name]; // } // d.Add(dp.Name, result);//获得s对象属性的值复制给d对象的属性 // } // } // } // catch (Exception ex) // { // throw ex; // } // return d; //} } }