XML与实体类,DataTable,List之间进行转换

来源:互联网 发布:ubuntu安装deb包命令 编辑:程序博客网 时间:2024/04/30 02:05

我们需要在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
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.IO;
usingSystem.Data;
usingSystem.Xml;
usingSystem.Xml.Serialization;
 
/// <summary>
/// Xml序列化与反序列化
/// </summary>
publicclass XmlUtil
{
    #region 反序列化
    /// <summary>
    /// 反序列化
    /// </summary>
    /// <param name="type">类型</param>
    /// <param name="xml">XML字符串</param>
    /// <returns></returns>
    publicstatic object Deserialize(Type type, stringxml)
    {
        try
        {
            using(StringReader sr = newStringReader(xml))
            {
                XmlSerializer xmldes = newXmlSerializer(type);
                returnxmldes.Deserialize(sr);
            }
        }
        catch(Exception e)
        {
 
            returnnull;
        }
    }
    /// <summary>
    /// 反序列化
    /// </summary>
    /// <param name="type"></param>
    /// <param name="xml"></param>
    /// <returns></returns>
    publicstatic object Deserialize(Type type, Stream stream)
    {
        XmlSerializer xmldes = newXmlSerializer(type);
        returnxmldes.Deserialize(stream);
    }
    #endregion
 
    #region 序列化
    /// <summary>
    /// 序列化
    /// </summary>
    /// <param name="type">类型</param>
    /// <param name="obj">对象</param>
    /// <returns></returns>
    publicstatic string Serializer(Type type, objectobj)
    {
        MemoryStream Stream = newMemoryStream();
        XmlSerializer xml = newXmlSerializer(type);
        try
        {
            //序列化对象
            xml.Serialize(Stream, obj);
        }
        catch(InvalidOperationException)
        {
            throw;
        }
        Stream.Position = 0;
        StreamReader sr = newStreamReader(Stream);
        stringstr = sr.ReadToEnd();
         
        sr.Dispose();
        Stream.Dispose();
 
        returnstr;
    }
 
    #endregion
}

下面是测试代码:

 

1. 实体对象转换到Xml

 

1
2
3
4
5
6
7
8
9
publicclass Student
{
    publicstring Name { set;get; }
    publicint Age { set;get; }
}
 
Student stu1 = newStudent() { Name = "okbase", Age = 10 };
stringxml = XmlUtil.Serializer(typeof(Student), stu1);
Console.Write(xml);

2. Xml转换到实体对象

 

1
2
Student stu2 = XmlUtil.Deserialize(typeof(Student), xml) asStudent;
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 = newDataTable("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) asDataTable;
 
// 输出测试结果
foreach(DataRow dr indt2.Rows)
{
    foreach(DataColumn col indt2.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 = newList<Student>(3);
 
list1.Add(newStudent() { Name = "okbase", Age = 10 });
list1.Add(newStudent() { 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) asList<Student>;
foreach(Student stu inlist2)
{
    Console.WriteLine(stu.Name + ","+ stu.Age.ToString());
}

从代码可以看到,千变万化不离其宗!

 

0 0
原创粉丝点击