使用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、定义实体类
1 [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] 2 [System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)] 3 public class Request 4 { 5 6 public string System { get; set; } 7 public string SecurityCode { get; set; } 8 public PatientBasicInfo PatientInfo { get; set; } 9 } 10 11 /// <remarks/> 12 [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] 13 public partial class PatientBasicInfo 14 { 15 public string PatientNo { get; set; } 16 public string PatientName { get; set; } 17 public string Phoneticize { get; set; } 18 public string Sex { get; set; } 19 public string Birth { get; set; } 20 public string BirthPlace { get; set; } 21 public string Country { get; set; } 22 public string Nation { get; set; } 23 public string IDNumber { get; set; } 24 public string SecurityNo { get; set; } 25 public string Workunits { get; set; } 26 public string Address { get; set; } 27 public string ZIPCode { get; set; } 28 public string Phone { get; set; } 29 public string ContactPerson { get; set; } 30 public string ContactShip { get; set; } 31 public string ContactPersonAdd { get; set; } 32 public string ContactPersonPhone { get; set; } 33 public string OperationCode { get; set; } 34 public string OperationName { get; set; } 35 public string OperationTime { get; set; } 36 public string CardNo { get; set; } 37 public string ChangeType { get; set; } 38 39 }
2、给实体类赋值,并通过序列化将实体类转换成XML格式的字符串
1 Request patientIn = new Request(); 2 patientIn.System = "HIS"; 3 patientIn.SecurityCode = "HIS5"; 4 5 PatientBasicInfo basicInfo = new PatientBasicInfo(); 6 basicInfo.PatientNo = "1234"; 7 basicInfo.PatientName = "测试"; 8 basicInfo.Phoneticize = ""; 9 basicInfo.Sex = "1"; 10 basicInfo.Birth = ""; 11 basicInfo.BirthPlace = ""; 12 basicInfo.Country = ""; 13 basicInfo.Nation = ""; 14 basicInfo.IDNumber = ""; 15 basicInfo.SecurityNo = ""; 16 basicInfo.Workunits = ""; 17 basicInfo.Address = ""; 18 basicInfo.ZIPCode = ""; 19 basicInfo.Phone = ""; 20 basicInfo.ContactShip = ""; 21 basicInfo.ContactPersonPhone = ""; 22 basicInfo.ContactPersonAdd = ""; 23 basicInfo.ContactPerson = ""; 24 basicInfo.ChangeType = ""; 25 basicInfo.CardNo = ""; 26 basicInfo.OperationCode = ""; 27 basicInfo.OperationName = ""; 28 basicInfo.OperationTime = ""; 29 30 patientIn.PatientInfo = basicInfo; 31 32 //序列化 33 string strxml = XmlSerializeHelper.XmlSerialize<Request>(patientIn);
3、生成的XML实例
1 <?xml version="1.0" encoding="utf-16"?> 2 <Request xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 3 <System>HIS</System> 4 <SecurityCode>HIS5</SecurityCode> 5 <PatientInfo> 6 <PatientNo>1234</PatientNo> 7 <PatientName>测试</PatientName> 8 <Phoneticize /> 9 <Sex>1</Sex> 10 <Birth /> 11 <BirthPlace /> 12 <Country /> 13 <Nation /> 14 <IDNumber /> 15 <SecurityNo /> 16 <Workunits /> 17 <Address /> 18 <ZIPCode /> 19 <Phone /> 20 <ContactPerson /> 21 <ContactShip /> 22 <ContactPersonAdd /> 23 <ContactPersonPhone /> 24 <OperationCode /> 25 <OperationName /> 26 <OperationTime /> 27 <CardNo /> 28 <ChangeType /> 29 </PatientInfo> 30 </Request>
二、将XML转换成实体类
把XML转换成相应的实体类,需要使用到XmlSerializer类的Deserialize方法,将XML进行反序列化。
1 public static T DESerializer<T>(string strXML) where T:class 2 { 3 try 4 { 5 using (StringReader sr = new StringReader(strXML)) 6 { 7 XmlSerializer serializer = new XmlSerializer(typeof(T)); 8 return serializer.Deserialize(sr) as T; 9 } 10 } 11 catch (Exception ex) 12 { 13 return null; 14 } 15 }
示例:
将上例中序列化后的XML反序列化成实体类
1 //反序列化 2 Request r = XmlSerializeHelper.DESerializer<Request>(strxml);
三、将DataTable转换成XML
1 //将DataTable转换成XML 2 DataTable dt = new DataTable("MyTable"); 3 //添加列 4 dt.Columns.Add("Id", typeof(int)); 5 dt.Columns.Add("Name", typeof(string)); 6 dt.Columns.Add("Sex", typeof(char)); 7 //添加行 8 dt.Rows.Add(1, "小明", '1'); 9 dt.Rows.Add(2, "小红", '2'); 10 dt.Rows.Add(3, "小王", '2'); 11 dt.Rows.Add(4, "测试", '2'); 12 //序列化,将DataTable转换成XML格式的字符串 13 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进行反序列化。
1 //反序列化 2 List<Student> listStu = XmlSerializeHelper.DESerializer<List<Student>>(strXML);