• c# 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
    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(" ");
    }

    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

  • 相关阅读:
    delphi TMS FlexCel 导出PDF
    delphi TMS FlexCel Sheet工作表信息
    delphi TMS FlexCel 预览Excel
    delphi TMS FlexCel Sheet工作表新增复制
    delphi TMS FlexCel 打印Excel
    delphi TMS FlexCel 保存Excel
    delphi TMS FlexCel Sheet工作表选择和查找
    【算法】字典树
    【算法】拓扑排序
    【算法】单调栈
  • 原文地址:https://www.cnblogs.com/maxiaotiao/p/3571708.html
Copyright © 2020-2023  润新知