using
?System;
using
?System.Collections.Generic;
using
?System.Linq;
using
?System.Text;
using
?System.IO;
using
?System.Data;
using
?System.Xml;
using
?System.Xml.Serialization;
/// <summary>
/// Xml序列化與反序列化
/// </summary>
public
?class
?XmlUtil
{
????
#region 反序列化
????
/// <summary>
????
/// 反序列化
????
/// </summary>
????
/// <param name="type">類型</param>
????
/// <param name="xml">XML字符串</param>
????
/// <returns></returns>
????
public
?static
?object
?Deserialize(Type type,?
string
?xml)
????
{
????????
try
????????
{
????????????
using
?(StringReader sr =?
new
?StringReader(xml))
????????????
{
????????????????
XmlSerializer xmldes =?
new
?XmlSerializer(type);
????????????????
return
?xmldes.Deserialize(sr);
????????????
}
????????
}
????????
catch
?(Exception e)
????????
{
????????????
return
?null
;
????????
}
????
}
????
/// <summary>
????
/// 反序列化
????
/// </summary>
????
/// <param name="type"></param>
????
/// <param name="xml"></param>
????
/// <returns></returns>
????
public
?static
?object
?Deserialize(Type type, Stream stream)
????
{
????????
XmlSerializer xmldes =?
new
?XmlSerializer(type);
????????
return
?xmldes.Deserialize(stream);
????
}
????
#endregion
????
#region 序列化
????
/// <summary>
????
/// 序列化
????
/// </summary>
????
/// <param name="type">類型</param>
????
/// <param name="obj">對象</param>
????
/// <returns></returns>
????
public
?static
?string
?Serializer(Type type,?
object
?obj)
????
{
????????
MemoryStream Stream =?
new
?MemoryStream();
????????
XmlSerializer xml =?
new
?XmlSerializer(type);
????????
try
????????
{
????????????
//序列化對象
????????????
xml.Serialize(Stream, obj);
????????
}
????????
catch
?(InvalidOperationException)
????????
{
????????????
throw
;
????????
}
????????
Stream.Position = 0;
????????
StreamReader sr =?
new
?StreamReader(Stream);
????????
string
?str = sr.ReadToEnd();
????????
?????????
sr.Dispose();
????????
Stream.Dispose();
????????
return
?str;
????
}
????
#endregion
}
下面是測試代碼:
?
1. 實體對象轉換到Xml
?
1 2 3 4 5 6 7 8 9 | public ?class ?Student { ???? public ?string ?Name {? set ;? get ; } ???? public ?int ?Age {? set ;? get ; } } Student stu1 =? new ?Student() { Name =? "okbase" , Age = 10 }; string ?xml = XmlUtil.Serializer( typeof (Student), stu1); Console.Write(xml); |
2.?Xml轉換到實體對象
?
1 2 | Student stu2 = XmlUtil.Deserialize( typeof (Student), xml)? as ?Student; Console.Write( string .Format( "名字:{0},年齡:{1}" , stu2.Name, stu2.Age)); |
3.?DataTable轉換到Xml
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // 生成DataTable對象用于測試 DataTable dt1 =? new ?DataTable( "mytable" );??? // 必須指明DataTable名稱 dt1.Columns.Add( "Dosage" ,? typeof ( int )); dt1.Columns.Add( "Drug" ,? typeof ( string )); dt1.Columns.Add( "Patient" ,? typeof ( string )); dt1.Columns.Add( "Date" ,? typeof (DateTime)); // 添加行 dt1.Rows.Add(25,? "Indocin" ,? "David" , DateTime.Now); dt1.Rows.Add(50,? "Enebrel" ,? "Sam" , DateTime.Now); dt1.Rows.Add(10,? "Hydralazine" ,? "Christoff" , DateTime.Now); dt1.Rows.Add(21,? "Combivent" ,? "Janet" , DateTime.Now); dt1.Rows.Add(100,? "Dilantin" ,? "Melanie" , DateTime.Now); // 序列化 xml = XmlUtil.Serializer( typeof (DataTable), dt1); Console.Write(xml); |
4.?Xml轉換到DataTable
?
1 2 3 4 5 6 7 8 9 10 11 12 13 | // 反序列化 DataTable dt2 = XmlUtil.Deserialize( typeof (DataTable), xml)? as ?DataTable; // 輸出測試結果 foreach ?(DataRow dr? in ?dt2.Rows) { ???? foreach ?(DataColumn col? in ?dt2.Columns) ???? { ???????? Console.Write(dr[col].ToString() +? " " ); ???? } ???? Console.Write( "\r\n" ); } |
5.?List轉換到Xml
?
1 2 3 4 5 6 7 8 | // 生成List對象用于測試 List<Student> list1 =? new ?List<Student>(3); list1.Add( new ?Student() { Name =? "okbase" , Age = 10 }); list1.Add( new ?Student() { Name =? "csdn" , Age = 15 }); // 序列化 xml = XmlUtil.Serializer( typeof (List<Student>), list1); Console.Write(xml); |
6.?Xml轉換到List
?
1 2 3 4 5 | List<Student> list2 = XmlUtil.Deserialize( typeof (List<Student>), xml)? as ?List<Student>; foreach ?(Student stu? in ?list2) { ???? Console.WriteLine(stu.Name +? "," ?+ stu.Age.ToString()); } |
轉載:http://blog.okbase.net/haobao/archive/62.html
本文轉自程序猿博客51CTO博客,原文鏈接http://blog.51cto.com/haihuiwei/1675868如需轉載請自行聯系原作者
365850153