/// <summary>
        /// 采用反射机制对对对象属性赋值
        /// </summary>
        /// <param name="node"></param>
        /// <param name="P"></param>
        public static void ReflexValue(XmlNode Nodes, object obj)
        {
            XmlNodeList nodeList = Nodes.ChildNodes;
            foreach (XmlNode node in nodeList)
            {

                string filedName = node.Name.ToUpper();
                try
                {
                    //取到属性
                    PropertyInfo property = obj.GetType().GetProperty(filedName);
                    var valtype = property.PropertyType;
                    if (valtype.IsGenericType && valtype.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))//判断convertsionType是否为nullable泛型类  
                    {
                        //如果type为nullable类,声明一个NullableConverter类,该类提供从Nullable类到基础基元类型的转换  
                        System.ComponentModel.NullableConverter nullableConverter = new System.ComponentModel.NullableConverter(valtype);
                        //将type转换为nullable对的基础基元类型  
                        valtype = nullableConverter.UnderlyingType;
                    }
                    var val = node.InnerText;
                    //decimal dl = 0;
                    DateTime dt;
                    //if (valtype.Name == "Decimal" || valtype.Name == "Single")
                    //{
                    //    if (decimal.TryParse(val, out  dl))
                    //        val = dl.ToString();
                    //}
                    //else if (valtype.Name == "DateTime")
                    //{
                    //    if (DateTime.TryParse(val, out  dt))
                    //        val = dt.ToString();
                    //    else
                    //    {
                    //        val = DateTime.Now.ToString();
                    //    }
                    //}
                    if (valtype.Name == "DateTime")
                    {

                        if (DateTime.TryParseExact(val, "yyyyMMddHHmmss", System.Globalization.CultureInfo.CurrentCulture, System.Globalization.DateTimeStyles.None, out dt))
                            val = dt.ToString();
                        else
                        {
                            val = DateTime.Now.ToString();
                        }
                    }
                    if (valtype.Name != "String" && val == "")
                        property.SetValue(obj, null);
                    else
                        property.SetValue(obj, Convert.ChangeType(val, valtype), null);
                }
                catch (Exception ex)
                {
                    Common.WriteExceptionLog(ex);
                }
            }
        }

 

posted on 2018-11-09 15:23  许一朵岁月  阅读(764)  评论(0编辑  收藏  举报