123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- using Nest;
- using Newtonsoft.Json.Linq;
- using System;
- using System.Collections.Generic;
- using System.Reflection;
- using System.Text;
- namespace CoreEntity.ESEntity
- {
- public class EsFields<T>
- {
- public static T entity(T a, FieldValues fields)
- {
- a = HitsItem<T>.MapperFields<T>(fields, a);
- return a;
- }
- /// <summary>
- /// 反射实现两个类的对象之间相同属性的值的复制
- /// 适用于初始化新实体
- /// </summary>
- /// <typeparam name="D">返回的实体</typeparam>
- /// <typeparam name="S">数据源实体</typeparam>
- /// <param name="s">数据源实体</param>
- /// <returns>返回的新实体</returns>
- public static T MapperFields<T>(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<Object>(new Field(dp.Name));
- result = token[0];
- if (dp.PropertyType == typeof(DateTime?))
- result = HitsItem<T>.ConvertIntDatetime(Convert.ToDouble(result));
- else
- result = Convert.ChangeType(result, dp.PropertyType);
- //JsonConvert.PopulateObject(d);
- }
- else
- {
- if (dp.PropertyType == typeof(DateTime?))
- result = HitsItem<T>.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<T>.MapperFieldsDynamic<T>(fields, a);
- // return a;
- //}
- ///// <summary>
- ///// 反射实现两个类的对象之间相同属性的值的复制
- ///// 适用于初始化新实体
- ///// </summary>
- ///// <typeparam name="D">返回的实体</typeparam>
- ///// <typeparam name="S">数据源实体</typeparam>
- ///// <param name="s">数据源实体</param>
- ///// <returns>返回的新实体</returns>
- //public static Dictionary<string, JToken> MapperFieldsDynamic<T>(dynamic s, Dictionary<string, JToken> 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<T>.ConvertIntDatetime(Convert.ToDouble(result));
- // //else
- // // ;
- // }
- // else
- // {
- // if (dp.PropertyType == typeof(DateTime?))
- // result = HitsItem<T>.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;
- //}
- }
- }
|