XML 和 List 互转类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml; namespace XmlHelper { /// <summary> /// 实体转Xml,Xml转实体类 /// </summary> /// <typeparam name="T"></typeparam> public class XmlHelper<T> where T : new() { #region 实体类转成Xml /// <summary> /// 对象实例转成xml /// </summary> /// <param name="item"> 对象实例 </param> /// <returns></returns> public static string EntityToXml(T item) { IList<T> items = new List<T>(); items.Add(item); return EntityToXml(items); } /// <summary> /// 对象实例集转成xml /// </summary> /// <param name="items"> 对象实例集 </param> /// <returns></returns> public static string EntityToXml(IList<T> items) { // 创建XmlDocument文档 XmlDocument doc = new XmlDocument(); // 创建根元素 XmlElement root = doc.CreateElement( typeof(T).Name + " s "); // 添加根元素的子元素集 foreach (T item in items) { EntityToXml(doc, root, item); } // 向XmlDocument文档添加根元素 doc.AppendChild(root); return doc.InnerXml; } private static void EntityToXml(XmlDocument doc, XmlElement root, T item) { // 创建元素 XmlElement xmlItem = doc.CreateElement( typeof(T).Name); // 对象的属性集 System.Reflection.PropertyInfo[] propertyInfo = typeof(T).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance); foreach (System.Reflection.PropertyInfo pinfo in propertyInfo) { if (pinfo != null) { // 对象属性名称 string name = pinfo.Name; // 对象属性值 string value = String.Empty; if (pinfo.GetValue(item, null) != null) value = pinfo.GetValue(item, null).ToString(); // 获取对象属性值 // 设置元素的属性值 xmlItem.SetAttribute(name, value); } } // 向根添加子元素 root.AppendChild(xmlItem); } #endregion #region Xml转成实体类 /// <summary> /// Xml转成对象实例 /// </summary> /// <param name="xml"> xml </param> /// <returns></returns> public static T XmlToEntity( string xml) { IList<T> items = XmlToEntityList(xml); if (items != null && items.Count > 0) return items[ 0]; else return default(T); } /// <summary> /// Xml转成对象实例集 /// </summary> /// <param name="xml"> xml </param> /// <returns></returns> public static IList<T> XmlToEntityList( string xml) { XmlDocument doc = new XmlDocument(); try { doc.LoadXml(xml); } catch { return null; } if (doc.ChildNodes.Count != 1) return null; if (doc.ChildNodes[ 0].Name.ToLower() != typeof(T).Name.ToLower() + " s ") return null; XmlNode node = doc.ChildNodes[ 0]; IList<T> items = new List<T>(); foreach (XmlNode child in node.ChildNodes) { if (child.Name.ToLower() == typeof(T).Name.ToLower()) items.Add(XmlNodeToEntity(child)); } return items; } private static T XmlNodeToEntity(XmlNode node) { T item = new T(); if (node.NodeType == XmlNodeType.Element) { XmlElement element = (XmlElement)node; System.Reflection.PropertyInfo[] propertyInfo = typeof(T).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance); foreach (XmlAttribute attr in element.Attributes) { string attrName = attr.Name.ToLower(); string attrValue = attr.Value.ToString(); foreach (System.Reflection.PropertyInfo pinfo in propertyInfo) { if (pinfo != null) { string name = pinfo.Name.ToLower(); Type dbType = pinfo.PropertyType; if (name == attrName) { if (String.IsNullOrEmpty(attrValue)) continue; switch (dbType.ToString()) { case " System.Int32 ": pinfo.SetValue(item, Convert.ToInt32(attrValue), null); break; case " System.Boolean ": pinfo.SetValue(item, Convert.ToBoolean(attrValue), null); break; case " System.DateTime ": pinfo.SetValue(item, Convert.ToDateTime(attrValue), null); break; case " System.Decimal ": pinfo.SetValue(item, Convert.ToDecimal(attrValue), null); break; case " System.Double ": pinfo.SetValue(item, Convert.ToDouble(attrValue), null); break; default: pinfo.SetValue(item, attrValue, null); break; } continue; } } } } } return item; } #endregion }
}
XML转List
List转XML
Model转XML
XML转Model