Ejemplo n.º 1
0
        /// <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方法
        }
Ejemplo n.º 2
0
        /// <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);
        }
Ejemplo n.º 3
0
        /// <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;
                    }
                }
            }
        }