使用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);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM