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
}
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