123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Xml;
- namespace Ant.Service.Common.ToolsHelper
- {
- public class XMLHelperToList<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
- }
- }
|