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()); } |