zoukankan      html  css  js  c++  java
  • 使用C#实现实体类和XML相互转换

    一、实体类转换成XML

    将实体类转换成XML需要使用XmlSerializer类的Serialize方法,将实体类序列化

    public static string XmlSerialize<T>(T obj)
    {
           using (StringWriter sw = new StringWriter())
           {
                 Type t= obj.GetType();             
                 XmlSerializer serializer = new XmlSerializer(obj.GetType());
                 serializer.Serialize(sw, obj);
                 sw.Close();
                 return sw.ToString();
            }
    }

     

    示例:

    1、定义实体类

        [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
        [System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
        public class Request
        {
    
            public string System { get; set; }
            public string SecurityCode { get; set; }
            public PatientBasicInfo PatientInfo { get; set; }      
        }
    
        /// <remarks/>
        [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
        public partial class PatientBasicInfo
        {
            public string PatientNo { get; set; }
            public string PatientName { get; set; }
            public string Phoneticize { get; set; }
            public string Sex { get; set; }
            public string Birth { get; set; }
            public string BirthPlace { get; set; }
            public string Country { get; set; }
            public string Nation { get; set; }
            public string IDNumber { get; set; }
            public string SecurityNo { get; set; }
            public string Workunits { get; set; }
            public string Address { get; set; }
            public string ZIPCode { get; set; }
            public string Phone { get; set; }
            public string ContactPerson { get; set; }
            public string ContactShip { get; set; }
            public string ContactPersonAdd { get; set; }
            public string ContactPersonPhone { get; set; }
            public string OperationCode { get; set; }
            public string OperationName { get; set; }
            public string OperationTime { get; set; }
            public string CardNo { get; set; }
            public string ChangeType { get; set; }
    
        }





    2、给实体类赋值,并通过序列化将实体类转换成XML格式的字符串

     Request patientIn = new Request();
                 patientIn.System = "HIS";
                 patientIn.SecurityCode = "HIS5";
     
                 PatientBasicInfo basicInfo = new PatientBasicInfo();
                 basicInfo.PatientNo = "1234";
                 basicInfo.PatientName = "测试";
                 basicInfo.Phoneticize = "";
                 basicInfo.Sex = "1";
                 basicInfo.Birth = "";
                 basicInfo.BirthPlace = "";
                 basicInfo.Country = "";
                 basicInfo.Nation = "";
                 basicInfo.IDNumber = "";
                 basicInfo.SecurityNo = "";
                 basicInfo.Workunits = "";
                 basicInfo.Address = "";
                 basicInfo.ZIPCode = "";
                 basicInfo.Phone = "";
                 basicInfo.ContactShip = "";
                 basicInfo.ContactPersonPhone = "";
                 basicInfo.ContactPersonAdd = "";
                 basicInfo.ContactPerson = "";
                 basicInfo.ChangeType = "";
                 basicInfo.CardNo = "";
                 basicInfo.OperationCode = "";
                 basicInfo.OperationName = "";
                 basicInfo.OperationTime = "";
     
                 patientIn.PatientInfo = basicInfo;
     
                 //序列化
                 string strxml = XmlSerializeHelper.XmlSerialize<Request>(patientIn);


    3、生成的XML实例

     

    <?xml version="1.0" encoding="utf-16"?>
     <Request xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
       <System>HIS</System>
       <SecurityCode>HIS5</SecurityCode>
       <PatientInfo>
         <PatientNo>1234</PatientNo>
         <PatientName>测试</PatientName>
         <Phoneticize />
         <Sex>1</Sex>
         <Birth />
         <BirthPlace />
         <Country />
         <Nation />
         <IDNumber />
         <SecurityNo />
         <Workunits />
         <Address />
         <ZIPCode />
         <Phone />
         <ContactPerson />
         <ContactShip />
         <ContactPersonAdd />
         <ContactPersonPhone />
         <OperationCode />
         <OperationName />
         <OperationTime />
         <CardNo />
         <ChangeType />
       </PatientInfo>
     </Request>

     
    二、将XML转换成实体类

    把XML转换成相应的实体类,需要使用到XmlSerializer类的Deserialize方法,将XML进行反序列化。

     public static T DESerializer<T>(string strXML) where T:class
     {
          try
         {
                 using (StringReader sr = new StringReader(strXML))
                {
                     XmlSerializer serializer = new XmlSerializer(typeof(T));
                     return serializer.Deserialize(sr) as T;
                }
          }
          catch (Exception ex)
          {
                 return null;
          }
     }
    
     


    示例:

    将上例中序列化后的XML反序列化成实体类

     //反序列化
     Request r = XmlSerializeHelper.DESerializer<Request>(strxml);

     三、将DataTable转换成XML
    复制代码

      //将DataTable转换成XML
     DataTable dt = new DataTable("MyTable");
     //添加列
     dt.Columns.Add("Id", typeof(int));
     dt.Columns.Add("Name", typeof(string));
     dt.Columns.Add("Sex", typeof(char));
     //添加行
     dt.Rows.Add(1, "小明", '1');
     dt.Rows.Add(2, "小红", '2');
     dt.Rows.Add(3, "小王", '2');
     dt.Rows.Add(4, "测试", '2');
     //序列化,将DataTable转换成XML格式的字符串
     string strXML = XmlSerializeHelper.XmlSerialize <DataTable> (dt);

    复制代码

    四、将XML转换成DataTable

    1 //反序列化,将XML转换成字符串
    2 DataTable dtNew=  XmlSerializeHelper.DESerializer<DataTable>(strXML);

    五、将List集合转换成XML
    复制代码

    /// <summary>
    /// 测试类
    /// </summary>
    public class Student
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public char Sex { get; set; }
        public int Age { get; set; }
    }

    //测试集合
    List<Student> list = new List<Student>()
    {
            new Student(){Id=1,Name="小红",Sex='2',Age=20},
            new Student(){Id=2,Name="小明",Sex='1',Age=22},
            new Student(){Id=3,Name="小王",Sex='1',Age=19},
            new Student(){Id=4,Name="测试",Sex='2',Age=23}
    };
    //序列化
    string strXML = XmlSerializeHelper.XmlSerialize<List<Student>>(list);

    复制代码

    六、将XML转换成集合

    使用上面例子中集合转换成的XML进行反序列化。

     //反序列化
     List<Student> listStu = XmlSerializeHelper.DESerializer<List<Student>>(strXML);

     

  • 相关阅读:
    POJ 3678 Katu Puzzle(POJ 六道2SAT之一)
    POJ 2942 Knights of the Round Table ★(点双连通分量+二分图判定)
    POJ 3207 Ikki's Story IV Panda's Trick (POJ 六道2SAT之一)
    POJ 2762 Going from u to v or from v to u?(有向图单向连通)
    POJ 3207 Ikki's Story IV Panda's Trick (POJ 六道2SAT之一)
    POJ 3694 Network ★(边双连通分量+并查集缩点+LCA)
    Visual C#常用函数和方法集汇总
    软件项目版本号的命名规则及格式
    软件项目版本号的命名规则及格式
    软件项目版本号的命名规则及格式
  • 原文地址:https://www.cnblogs.com/hnsongbiao/p/7717410.html
Copyright © 2011-2022 走看看