反射方式解析XML

        /// <summary>
        ///  返回实体类List
        /// </summary>
        /// <param name="filePath">xml文件目录</param>
        /// <param name="nodeParentName">父结点名称</param>
        /// <param name="nodeName">结点名称</param>
        /// <param name="nodeAncestorsName">祖父结点名称</param>
        /// <returns></returns>
        public static List<T> ConverToModelList(string filePath, string nodeParentName, string nodeName, string nodeAncestorsName = "")
        {
            List<T> lists = new List<T>();
            XElement xe = XElement.Load(@filePath);
            XElement ancestors = string.IsNullOrEmpty(nodeAncestorsName) ? xe.Element(nodeParentName) : xe.Element(nodeAncestorsName).Element(nodeParentName);
            IEnumerable<XElement> childrenItems = ancestors.Elements(nodeName);
            foreach (XElement node in childrenItems)
            {
                T SampleModel = new T();
                foreach (XElement item in node.Elements())
                {
                    foreach (PropertyInfo property in SampleModel.GetType().GetProperties())
                    {
                        if (item.Name == property.Name)
                        {
                            if (item.Value != "[Null]")
                            {
                                property.SetValue(SampleModel,
                                    Convert.ChangeType(item.Value, property.PropertyType),
                                    null);
                                break;
                            }
                            else
                                property.SetValue(SampleModel, null, null);
                        }
                    }
                }
                lists.Add(SampleModel);
            }
            return lists;
        }

 

posted @ 2017-10-12 15:41  花生打代码会头痛  阅读(106)  评论(0)    收藏  举报