C#实现实体类和XML的相互转换
作者:.NET开发菜鸟
本文详细讲解了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
//反序列化,将XML转换成字符串 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);
到此这篇关于C#实现实体类和XML相互转换的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。