/// <summary> /// 测试,作废 /// </summary> /// <param name="model"></param> private static void SetValue(Object model) { //拿到对象的Items List属性 var itemsField = model.GetType().GetFields().Where(P => P.Name.ToLower() == "items").FirstOrDefault(); if (itemsField == null) { //当前类没有 items属性 return; } //创建 List 对象 var entityList = Activator.CreateInstance(itemsField.FieldType); //绑定List对象到model类 itemsField.SetValue(model, entityList); //创建List 泛型里的类实例 var subItem = itemsField.DeclaringType.Assembly.CreateInstance(itemsField.FieldType.GenericTypeArguments[0].FullName); //获取子类所有属性并赋值 var allProperties = subItem.GetType().GetFields(); for (int i = 0; i < allProperties.Length; i++) { //给子类属性赋值 YinHaiAttribute atturn = allProperties[i].GetCustomAttribute(typeof(YinHaiAttribute), false) as YinHaiAttribute; if (atturn != null) { //if (dic.TryGetValue(atturn.XmlAttName.ToLower().Trim(), out string value)) //{ // allProperties[i].SetValue(dealModel.ReslutModel, value); //} } } //讲子类添加到List 里 BindingFlags flag = BindingFlags.Instance | BindingFlags.Public; MethodInfo methodInfo = entityList.GetType().GetMethod("Add", flag); methodInfo.Invoke(entityList, new object[] { subItem });//相当于List<T>调用Add方法 }
/// <summary> /// Model 转Dic 对象 /// </summary> /// <returns></returns> public static Dictionary <string, string> ConvertModelToDic(Object model) { Dictionary <string, string> dic = new Dictionary <string, string>(); if (model == null) { return(dic); } //获取子类所有属性并赋值 var allProperties = model.GetType().GetFields(); for (int i = 0; i < allProperties.Length; i++) { //给子类属性赋值 YinHaiAttribute atturn = allProperties[i].GetCustomAttribute(typeof(YinHaiAttribute), false) as YinHaiAttribute; if (atturn != null) { dic.Add(atturn.XmlAttName.ToLower().Trim(), allProperties[i].GetValue(model)?.ToString() ?? ""); } } return(dic); }
/// <summary> /// Dic 转Result Model /// </summary> /// <param name="dealModel"></param> private static void ParseXMLToModel(DealModel dealModel) { //如果xml是顶层 if (!dealModel.IsRows) { Dictionary <string, string> dic = XMLHelper.GetDicFromXML(dealModel.astr_jysc_xml, dealModel.ResultXmlXpath); Type type = dealModel.ReslutModel.GetType(); var allProperties = type.GetFields(); for (int i = 0; i < allProperties.Length; i++) { YinHaiAttribute atturn = allProperties[i].GetCustomAttribute(typeof(YinHaiAttribute), false) as YinHaiAttribute; if (atturn != null) { if (dic.TryGetValue(atturn.XmlAttName.ToLower().Trim(), out string value)) { allProperties[i].SetValue(dealModel.ReslutModel, value); } } } } else { //根据xml rows获取多个Dic,然后转换为model的items Dictionary <string, string>[] dicArray = XMLHelper.GetDicArrayFromXML(dealModel.astr_jysc_xml, dealModel.ResultXmlXpath); //拿到对象的Items List属性 var itemsField = dealModel.ReslutModel.GetType().GetFields().Where(P => P.Name.ToLower() == "items").FirstOrDefault(); if (itemsField == null) { dealModel.Msg += "--当前对象没有Items 属性"; return; } //创建 List 对象 var entityList = Activator.CreateInstance(itemsField.FieldType); //绑定List对象到model类 itemsField.SetValue(dealModel.ReslutModel, entityList); //所有到数据 for (int i = 0; i < dicArray.Length; i++) { try { //创建List 泛型里的类实例 var subItem = itemsField.DeclaringType.Assembly.CreateInstance(itemsField.FieldType.GenericTypeArguments[0].FullName); foreach (var item in dicArray[i].Keys) { //获取子类所有属性并赋值 var properties = subItem.GetType().GetFields().Where(P => (P.GetCustomAttribute(typeof(YinHaiAttribute), false) as YinHaiAttribute)?.XmlAttName.ToLower() == item).FirstOrDefault(); if (properties != null) { properties.SetValue(subItem, dicArray[i][item]); } else { //Model 里忘了封装 属性了。。。 dealModel.Msg = "--当前对象没找到标记为此的属性" + item; } } //讲子类添加到List 里 BindingFlags flag = BindingFlags.Instance | BindingFlags.Public; MethodInfo methodInfo = entityList.GetType().GetMethod("Add", flag); methodInfo.Invoke(entityList, new object[] { subItem });//相当于List<T>调用Add方法 } catch (Exception ex) { dealModel.Msg = "--异常" + ex.Message; } } } }