我们需要在XML与实体类,DataTable,List之间进行转换,下面是XmlUtil类,该类来自网络并稍加修改。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82 |
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
c# XML和实体类之间相互转换(序列化和反序列化)(转),布布扣,bubuko.com
原文:http://www.cnblogs.com/maxiaotiao/p/3571708.html