您的位置:首页 > 其它

实体类转XML(XML转实体类)操作

2008-11-26 20:21 211 查看
要转换的实体类如下:

public class OrderGoodInfo

{

private int _type;

private int _goodid;

private int _number;

private string _name;

private decimal _price;

public string Name

{

get { return _name; }

set { _name = value; }

}

public int Type

{

get { return _type; }

set { _type = value; }

}

public int GoodId

{

get { return _goodid; }

set { _goodid = value; }

}

public int Number

{

get { return _number; }

set { _number = value; }

}

public decimal Price

{

get { return _price; }

set { _price = value; }

}

}

#region 实体类,XML互操作

/// <summary>

/// 实体类序列化成xml

/// </summary>

/// <param name="enitities">The enitities.</param>

/// <param name="headtag">The headtag.</param>

/// <returns></returns>

public static string ObjListToXml<T>(List<T> enitities, string headtag)

{

StringBuilder sb = new StringBuilder();

PropertyInfo[] propinfos = null;

sb.AppendLine("<?xml version=\"1.0\" encoding=\"utf-8\"?>");

sb.AppendLine("<"+headtag+">");

foreach (T obj in enitities)

{

//初始化propertyinfo

if (propinfos == null)

{

Type objtype = obj.GetType();

propinfos = objtype.GetProperties();

}

sb.AppendLine("<item>");

foreach (PropertyInfo propinfo in propinfos)

{

sb.Append("<");

sb.Append(propinfo.Name);

sb.Append(">");

sb.Append(propinfo.GetValue(obj, null));

sb.Append("</");

sb.Append(propinfo.Name);

sb.AppendLine(">");

}

sb.AppendLine("</item>");

}

sb.AppendLine("</" + headtag + ">");

return sb.ToString();

}

/// <summary>

/// 使用XML初始化实体类容器

/// </summary>

/// <typeparam name="T"></typeparam>

/// <param name="typename">The typename.</param>

/// <param name="xml">The XML.</param>

/// <param name="headtag">The headtag.</param>

/// <returns></returns>

public static List<T> XmlToObjList<T>(string xml,string headtag)

where T : new()

{

List<T> list = new List<T>();

XmlDocument doc = new XmlDocument();

PropertyInfo[] propinfos = null;

doc.LoadXml(xml);

XmlNodeList nodelist = doc.SelectNodes("/" + headtag + "/item");

foreach (XmlNode node in nodelist)

{

T entity = new T();

//初始化propertyinfo

if (propinfos == null)

{

Type objtype = entity.GetType();

propinfos = objtype.GetProperties();

}

//填充entity类的属性

foreach (PropertyInfo propinfo in propinfos)

{

XmlNode cnode = node.SelectSingleNode(propinfo.Name);

string v = cnode.InnerText;

if (v != null)

propinfo.SetValue(entity, Convert.ChangeType(v, propinfo.PropertyType), null);

}

list.Add(entity);

}

return list;

}

#endregion

}

使用如下:

protected void Page_Load(object sender, EventArgs e)

{

OrderGoodInfo good1 = new OrderGoodInfo();

good1.GoodId = 1;

good1.Number = 1;

good1.Price = 100;

good1.Type = 1;

OrderGoodInfo good2= new OrderGoodInfo();

good2.GoodId = 2;

good2.Number = 2;

good2.Price = 200;

good2.Type = 2;

List<OrderGoodInfo> list = new List<OrderGoodInfo>();

list.Add(good1);

list.Add(good2);

string xmlstr = XmlHelper.ObjListToXml(list, "goods");

Response.Write(xmlstr);

List<OrderGoodInfo> nlist = XmlHelper.XmlToObjList<OrderGoodInfo>(xmlstr, "goods");

Response.Write(XmlHelper.ObjListToXml(nlist, "goods"));

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: