c# XML和实体类之间相互转换(序列化和反序列化)[砖]

link: http://blog.okbase.net/haobao/archive/62.html

by: 好饱

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

}

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

时间: 2024-11-15 04:55:14

c# XML和实体类之间相互转换(序列化和反序列化)[砖]的相关文章

XML和实体类之间相互转换(序列化和反序列化)

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

C# XML和实体类之间相互转换(序列化和反序列化)

我们需要在XML与实体类,DataTable,List之间进行转换,下面是XmlUtil类,该类来自网络并稍加修改. 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> ///

java中的xml与实体类之间的映射

实体类: 1 package xml; 2 3 import javax.xml.bind.annotation.XmlRootElement; 4 5 @XmlRootElement 6 public class User { 7 String name; 8 String english_name; 9 String age; 10 String sex; 11 String address; 12 String description; 13 public User(){} 14 15 p

[Unity]C#中 将XML和实体类之间进行相互转换的工具类

using System; using System.Xml; using System.Xml.Serialization; using System.IO; namespace LOTool { public class LO_XMLTool { #region 反序列化 /// <summary> /// 反序列化 /// </summary> /// <param name="type">类型</param> /// <pa

如何由XSD自动生成XML和实体类

项目中有时候要用XML作为数据源,因此需要定义XML文件和相应的类,最佳方法是首先定义XSD,然后自动生成实体类,最后生成XML和填充数据:读取XML数据源的时候,首先用XSD验证XML数据格式,然后自动读入实体类使用. 定义XSD的过程就是类似设计表结构的过程,二者也可以相互转化. 本文讨论了如何定义XSD文件(XML Schema),然后自动生成实体类,最后生成XML的过程,以及如何根据XSD验证XML文件的合法性.以供大家做项目时参考. 1. 首先在VS2005中添加一个XSD文件.例子X

对象和XML之间的序列化和反序列化

JAXB主要用来实现对象和XML之间的序列化和反序列化 用于序列化的XmlUtil package cn.lzrabbit; import java.io.StringReader; import java.io.StringWriter; import javax.xml.bind.*; public class XmlUtil { public static String toXML(Object obj) { try { JAXBContext context = JAXBContext.

实体类之间属性对比的方法

分享一个实体类之间属性对比的方法 方法用途:对实体类的属性进行修改操作:如果当前修改操作与原先的实体类属性值一样则返回为true,无需进行修改操作:反之则进行修改操作: 参考连接:https://www.cnblogs.com/mollie-x/p/10569286.html import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import j

XML文件与实体类之间的互相转换

二 序列化 XML文件与实体类的互相转换 一.将XML文件反序列化为实体类对象 1. 通常程序的配置信息都保存在程序或者网站的专门的配置文件中(App.config/web.config).但是现在为了演示XML序列化和反序列化,将配置信息保存在一个XML文件(config.xml)中,通过反序列化将配置信息读取出来保存到一个单独的类(Config.cs)中.这样如果需要用到配置信息,没必要每次都读写XML文件,只需要调用Config这个类就可以获取对应节点的信息. config.xml: <?

AutoMapper(一)——实现数据契约和实体类之间的转换

以前做过Object到Object的转换方法的封装,底层主要还是靠反射取值赋值+循环来实现的.最近在公司里维护旧系统,这个系统使用了WCF,当时就很好奇他们的数据契约到实体模型的转换时怎么做的,之后查看源码,发现他们居然是一个属性一个属性的赋值过来的,当时就给我雷到了,难道就没有人举得这个地方可以封装起来吗? 据我目前了解,有三种方法可以实现这个实体类到实体类的转换过程,下面来简述下这三种方式. 第一种,也是最简单的一种,是用list自带的转换方法,但是这种方法需要自己定义转换规则,写起来也挺麻