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


    复制代码
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.IO;
     6 using System.Data;
     7 using System.Xml;
     8 using System.Xml.Serialization;
     9  
    10 /// <summary>
    11 /// Xml序列化与反序列化
    12 /// </summary>
    13 public class XmlUtil
    14 {
    15     #region 反序列化
    16     /// <summary>
    17     /// 反序列化
    18     /// </summary>
    19     /// <param name="type">类型</param>
    20     /// <param name="xml">XML字符串</param>
    21     /// <returns></returns>
    22     public static object Deserialize(Type type, string xml)
    23     {
    24         try
    25         {
    26             using (StringReader sr = new StringReader(xml))
    27             {
    28                 XmlSerializer xmldes = new XmlSerializer(type);
    29                 return xmldes.Deserialize(sr);
    30             }
    31         }
    32         catch (Exception e)
    33         {
    34  
    35             return null;
    36         }
    37     }
    38     /// <summary>
    39     /// 反序列化
    40     /// </summary>
    41     /// <param name="type"></param>
    42     /// <param name="xml"></param>
    43     /// <returns></returns>
    44     public static object Deserialize(Type type, Stream stream)
    45     {
    46         XmlSerializer xmldes = new XmlSerializer(type);
    47         return xmldes.Deserialize(stream);
    48     }
    49     #endregion
    50  
    51     #region 序列化
    52     /// <summary>
    53     /// 序列化
    54     /// </summary>
    55     /// <param name="type">类型</param>
    56     /// <param name="obj">对象</param>
    57     /// <returns></returns>
    58     public static string Serializer(Type type, object obj)
    59     {
    60         MemoryStream Stream = new MemoryStream();
    61         XmlSerializer xml = new XmlSerializer(type);
    62         try
    63         {
    64             //序列化对象
    65             xml.Serialize(Stream, obj);
    66         }
    67         catch (InvalidOperationException)
    68         {
    69             throw;
    70         }
    71         Stream.Position = 0;
    72         StreamReader sr = new StreamReader(Stream);
    73         string str = sr.ReadToEnd();
    74          
    75         sr.Dispose();
    76         Stream.Dispose();
    77  
    78         return str;
    79     }
    80  
    81     #endregion
    82 }
    复制代码

    下面是测试代码:

    1. 实体对象转换到Xml

    复制代码
    1 public class Student
    2 {
    3     public string Name { set; get; }
    4     public int Age { set; get; }
    5 }
    6  
    7 Student stu1 = new Student() { Name = "okbase", Age = 10 };
    8 string xml = XmlUtil.Serializer(typeof(Student), stu1);
    9 Console.Write(xml);
    复制代码

    2. Xml转换到实体对象

    1 Student stu2 = XmlUtil.Deserialize(typeof(Student), xml) as Student;
    2 Console.Write(string.Format("名字:{0},年龄:{1}", stu2.Name, stu2.Age));

    3. DataTable转换到Xml

    复制代码
     1 // 生成DataTable对象用于测试
     2 DataTable dt1 = new DataTable("mytable");   // 必须指明DataTable名称
     3  
     4 dt1.Columns.Add("Dosage", typeof(int));
     5 dt1.Columns.Add("Drug", typeof(string));
     6 dt1.Columns.Add("Patient", typeof(string));
     7 dt1.Columns.Add("Date", typeof(DateTime));
     8  
     9 // 添加行
    10 dt1.Rows.Add(25, "Indocin", "David", DateTime.Now);
    11 dt1.Rows.Add(50, "Enebrel", "Sam", DateTime.Now);
    12 dt1.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now);
    13 dt1.Rows.Add(21, "Combivent", "Janet", DateTime.Now);
    14 dt1.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now);
    15  
    16 // 序列化
    17 xml = XmlUtil.Serializer(typeof(DataTable), dt1);
    18 Console.Write(xml);
    复制代码

    4. Xml转换到DataTable

    复制代码
     1 // 反序列化
     2 DataTable dt2 = XmlUtil.Deserialize(typeof(DataTable), xml) as DataTable;
     3  
     4 // 输出测试结果
     5 foreach (DataRow dr in dt2.Rows)
     6 {
     7     foreach (DataColumn col in dt2.Columns)
     8     {
     9         Console.Write(dr[col].ToString() + " ");
    10     }
    11  
    12     Console.Write("
    ");
    13 }
    复制代码

    5. List转换到Xml

    复制代码
    1 // 生成List对象用于测试
    2 List<Student> list1 = new List<Student>(3);
    3  
    4 list1.Add(new Student() { Name = "okbase", Age = 10 });
    5 list1.Add(new Student() { Name = "csdn", Age = 15 });
    6 // 序列化
    7 xml = XmlUtil.Serializer(typeof(List<Student>), list1);
    8 Console.Write(xml);
    复制代码

    6. Xml转换到List

    1 List<Student> list2 = XmlUtil.Deserialize(typeof(List<Student>), xml) as List<Student>;
    2 foreach (Student stu in list2)
    3 {
    4     Console.WriteLine(stu.Name + "," + stu.Age.ToString());
    5 }

    转载:http://blog.okbase.net/haobao/archive/62.html

    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());
  • 相关阅读:
    地三鲜
    在linux下使用am335x的DMA
    通过tarball形式安装HBASE Cluster(CDH5.0.2)——集群安装总览
    通过tarball形式安装HBASE Cluster(CDH5.0.2)——如何配置分布式集群中的zookeeper
    如何通过SSH及其Client 批量分发文件和执行管理命令
    解决ESXi有虚拟机模版部署的CentOS虚拟机,网卡eth0找不到问题
    CentOS 65 安装vmware tools 杂记
    安装vmware vCenter Appliance
    使用FileZilla解决从Windows上传文件到Linux vsftpd的乱码问题!
    不关闭seLinux解决vsftpd服务本地用户不能登录问题(500 OOPS: cannot change directory:/home/***)
  • 原文地址:https://www.cnblogs.com/sjqq/p/8352472.html
Copyright © 2020-2023  润新知