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

浙公网安备 33010602011771号