我们需要在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