asp.net XML序列化与反序列化
1、 创建方法类,引用程序集:using System.Xml.Serialization;
SerializeUtil.cs:
namespace Sjq.Utils
{
/// <summary>
/// 对象序列化与反序列化成XML文件
/// </summary>
public static class SerializeUtil
{
/// <summary>
/// 把对象序列化成XML文件
/// </summary>
/// <param name="obj">需要序列化的对象</param>
/// <param name="path">XML文件路径</param>
public static void SerializeXml(object obj, string path)
{
File.WriteAllText(path, SerializeStr(obj));
}
/// <summary>
/// 把对象序列化成xml字符串
/// </summary>
/// <param name="obj">需要序列化的对象</param>
public static string SerializeStrNoRoot(object obj)
{
var str = Regex.Replace(Regex.Replace(SerializeStr(obj),
"<\\?xml version=\"1.0\" encoding=\"utf-8\"\\?>\r\n",
string.Empty),
" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"",
string.Empty);
return str;
}
/// <summary>
/// 把对象序列化成xml字符串
/// </summary>
/// <param name="obj">需要序列化的对象</param>
public static string SerializeStr(object obj)
{
XmlSerializer xs = new XmlSerializer(obj.GetType());
string str = string.Empty;
using (MemoryStream ms = new MemoryStream())
{
System.Xml.XmlTextWriter xtw = new System.Xml.XmlTextWriter(ms, System.Text.Encoding.UTF8);
xtw.Formatting = System.Xml.Formatting.Indented;
xs.Serialize(xtw, obj);
ms.Seek(0, SeekOrigin.Begin);
using (StreamReader sr = new StreamReader(ms))
{
str = sr.ReadToEnd();
xtw.Close();
ms.Close();
}
}
return str;
}
/// <summary>
/// 把路径XML文件反序列化成对象
/// </summary>
/// <typeparam name="T">反序列化的对象</typeparam>
/// <param name="xml">XML路径</param>
/// <returns>反序列化的对象</returns>
public static T DesrializeXml<T>(string xmlpath)
{
T obj = default(T);
XmlSerializer xs = new XmlSerializer(typeof(T));
TextReader tr;
if (!File.Exists(xmlpath))
tr = new StringReader(xmlpath);
else
tr = new StreamReader(xmlpath);
using (tr)
obj = (T)xs.Deserialize(tr);
return obj;
}
}
}
2、定义需要XML序列化的实体对象
private List<object> _list = new List<object>();
//_list里面保存了任意的实体对象
object obj=new object();
_list.Add(obj);
3、对对象进行XML序列化:
//输出XML序列化后的结果
context.Response.Write(toXml());
//拼装XML文件
private string toXml(List<object> _list)
{
StringBuilder sb = new StringBuilder();
sb.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n");
foreach (var o in _list)
//调用SerializeUtil.cs类里面的方法
sb.Append(SerializeUtil.SerializeStrNoRoot(o));
sb.Append("\r\n</root>");
return sb.ToString();
}