日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#实现实体类和XML相互转换

發(fā)布時間:2023/12/18 C# 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#实现实体类和XML相互转换 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、實體類轉(zhuǎn)換成XML

將實體類轉(zhuǎn)換成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 Request4 {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、給實體類賦值,并通過序列化將實體類轉(zhuǎn)換成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轉(zhuǎn)換成實體類

把XML轉(zhuǎn)換成相應(yīng)的實體類,需要使用到XmlSerializer類的Deserialize方法,將XML進行反序列化。

1 public static T DESerializer<T>(string strXML) where T:class2 {3 try4 {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轉(zhuǎn)換成XML

1 //將DataTable轉(zhuǎn)換成XML2 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轉(zhuǎn)換成XML格式的字符串 13 string strXML = XmlSerializeHelper.XmlSerialize <DataTable> (dt);

四、將XML轉(zhuǎn)換成DataTable

1 //反序列化,將XML轉(zhuǎn)換成字符串 2 DataTable dtNew= XmlSerializeHelper.DESerializer<DataTable>(strXML);

五、將List集合轉(zhuǎn)換成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轉(zhuǎn)換成集合

使用上面例子中集合轉(zhuǎn)換成的XML進行反序列化。

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

//**************************************

1、實體類與XML相互轉(zhuǎn)換

將實體類轉(zhuǎn)換成XML需要使用XmlSerializer類的Serialize方法,將實體類序列化。

把XML轉(zhuǎn)換成相應(yīng)的實體類,需要使用到XmlSerializer類的Deserialize方法,將XML進行反序列化。

創(chuàng)建XML序列化公共處理類(XmlSerializeHelper.cs)

  • using System;

  • using System.IO;

  • using System.Xml.Serialization;

  • ?
  • /// <summary>

  • /// XML序列化公共處理類

  • /// </summary>

  • public static class XmlSerializeHelper

  • {

  • /// <summary>

  • /// 將實體對象轉(zhuǎn)換成XML

  • /// </summary>

  • /// <typeparam name="T">實體類型</typeparam>

  • /// <param name="obj">實體對象</param>

  • public static string XmlSerialize<T>(T obj)

  • {

  • try

  • {

  • using (StringWriter sw = new StringWriter())

  • {

  • Type t = obj.GetType();

  • XmlSerializer serializer = new XmlSerializer(obj.GetType());

  • serializer.Serialize(sw, obj);

  • sw.Close();

  • return sw.ToString();

  • }

  • }

  • catch (Exception ex)

  • {

  • throw new Exception("將實體對象轉(zhuǎn)換成XML異常", ex);

  • }

  • }

  • ?
  • /// <summary>

  • /// 將XML轉(zhuǎn)換成實體對象

  • /// </summary>

  • /// <typeparam name="T">實體類型</typeparam>

  • /// <param name="strXML">XML</param>

  • 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)

  • {

  • throw new Exception("將XML轉(zhuǎn)換成實體對象異常", ex);

  • }

  • }

  • }

  • 創(chuàng)建用戶信息類,用于示例使用。

  • /// <summary>

  • /// 用戶信息類

  • /// </summary>

  • public class UserInfo

  • {

  • /// <summary>

  • /// 編號

  • /// </summary>

  • public int ID { get; set; }

  • ?
  • /// <summary>

  • /// 名稱

  • /// </summary>

  • public string Name { get; set; }

  • ?
  • /// <summary>

  • /// 創(chuàng)建時間

  • /// </summary>

  • public DateTime? CreateTime { get; set; }

  • }

  • 1.1 示例1:將List與XML相互轉(zhuǎn)換

  • /// <summary>

  • /// 將List與XML相互轉(zhuǎn)換

  • /// </summary>

  • public static void ListToXmlTest()

  • {

  • //獲取用戶列表

  • List<UserInfo> userList = GetUserList();

  • ?
  • //將實體對象轉(zhuǎn)換成XML

  • string xmlResult = XmlSerializeHelper.XmlSerialize(userList);

  • ?
  • //將XML轉(zhuǎn)換成實體對象

  • List<UserInfo> deResult = XmlSerializeHelper.DESerializer<List<UserInfo>>(xmlResult);

  • }

  • ?
  • /// <summary>

  • /// 獲取用戶信息列表

  • /// </summary>

  • public static List<UserInfo> GetUserList()

  • {

  • List<UserInfo> userList = new List<UserInfo>();

  • userList.Add(new UserInfo() { ID = 1, Name = "張三", CreateTime = DateTime.Now });

  • userList.Add(new UserInfo() { ID = 2, Name = "李四", CreateTime = DateTime.Now });

  • userList.Add(new UserInfo() { ID = 2, Name = "王五" });

  • return userList;

  • }

  • XML結(jié)果:

  • <?xml version="1.0" encoding="utf-16"?>

  • <ArrayOfUserInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  • <UserInfo>

  • <ID>1</ID>

  • <Name>張三</Name>

  • <CreateTime>2018-10-04T15:59:53.7761027+08:00</CreateTime>

  • </UserInfo>

  • <UserInfo>

  • <ID>2</ID>

  • <Name>李四</Name>

  • <CreateTime>2018-10-04T15:59:54.9571044+08:00</CreateTime>

  • </UserInfo>

  • <UserInfo>

  • <ID>2</ID>

  • <Name>王五</Name>

  • <CreateTime xsi:nil="true" />

  • </UserInfo>

  • </ArrayOfUserInfo>

  • 1.2 示例2:將DataTable與XML相互轉(zhuǎn)換

  • /// <summary>

  • /// 將DataTable與XML相互轉(zhuǎn)換

  • /// </summary>

  • public static void DataTableToXmlTest()

  • {

  • //創(chuàng)建DataTable對象

  • DataTable dt = CreateDataTable();

  • ?
  • //將DataTable轉(zhuǎn)換成XML

  • string xmlResult = XmlSerializeHelper.XmlSerialize(dt);

  • ?
  • //將XML轉(zhuǎn)換成DataTable

  • DataTable deResult = XmlSerializeHelper.DESerializer<DataTable>(xmlResult);

  • }

  • ?
  • /// <summary>

  • /// 創(chuàng)建DataTable對象

  • /// </summary>

  • public static DataTable CreateDataTable()

  • {

  • //創(chuàng)建DataTable

  • DataTable dt = new DataTable("NewDt");

  • ?
  • //創(chuàng)建自增長的ID列

  • DataColumn dc = dt.Columns.Add("ID", Type.GetType("System.Int32"));

  • dt.Columns.Add(new DataColumn("Name", Type.GetType("System.String")));

  • dt.Columns.Add(new DataColumn("CreateTime", Type.GetType("System.DateTime")));

  • ?
  • //創(chuàng)建數(shù)據(jù)

  • DataRow dr = dt.NewRow();

  • dr["ID"] = 1;

  • dr["Name"] = "張三";

  • dr["CreateTime"] = DateTime.Now;

  • dt.Rows.Add(dr);

  • ?
  • dr = dt.NewRow();

  • dr["ID"] = 2;

  • dr["Name"] = "李四";

  • dr["CreateTime"] = DateTime.Now;

  • dt.Rows.Add(dr);

  • ?
  • dr = dt.NewRow();

  • dr["ID"] = 3;

  • dr["Name"] = "王五";

  • dr["CreateTime"] = DateTime.Now;

  • dt.Rows.Add(dr);

  • ?
  • return dt;

  • }

  • XML結(jié)果:

  • <?xml version="1.0" encoding="utf-16"?>

  • <DataTable>

  • <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">

  • <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="NewDt" msdata:UseCurrentLocale="true">

  • <xs:complexType>

  • <xs:choice minOccurs="0" maxOccurs="unbounded">

  • <xs:element name="NewDt">

  • <xs:complexType>

  • <xs:sequence>

  • <xs:element name="ID" type="xs:int" minOccurs="0" />

  • <xs:element name="Name" type="xs:string" minOccurs="0" />

  • <xs:element name="CreateTime" type="xs:dateTime" minOccurs="0" />

  • </xs:sequence>

  • </xs:complexType>

  • </xs:element>

  • </xs:choice>

  • </xs:complexType>

  • </xs:element>

  • </xs:schema>

  • <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">

  • <DocumentElement>

  • <NewDt diffgr:id="NewDt1" msdata:rowOrder="0" diffgr:hasChanges="inserted">

  • <ID>1</ID>

  • <Name>張三</Name>

  • <CreateTime>2018-10-04T16:06:10.8004082+08:00</CreateTime>

  • </NewDt>

  • <NewDt diffgr:id="NewDt2" msdata:rowOrder="1" diffgr:hasChanges="inserted">

  • <ID>2</ID>

  • <Name>李四</Name>

  • <CreateTime>2018-10-04T16:06:10.8004082+08:00</CreateTime>

  • </NewDt>

  • <NewDt diffgr:id="NewDt3" msdata:rowOrder="2" diffgr:hasChanges="inserted">

  • <ID>3</ID>

  • <Name>王五</Name>

  • <CreateTime>2018-10-04T16:06:10.8004082+08:00</CreateTime>

  • </NewDt>

  • </DocumentElement>

  • </diffgr:diffgram>

  • </DataTable>

  • 2、序列化常用Attribute講解說明

    [XmlRootAttribute("MyCity", Namespace="abc.abc", IsNullable=false)]?????// 當(dāng)該類為Xml根節(jié)點時,以此為根節(jié)點名稱。
    public class City

    [XmlAttribute("AreaName")]????// 表現(xiàn)為Xml節(jié)點屬性。<... AreaName="..."/>
    public string Name

    [XmlElementAttribute("AreaId", IsNullable = false)]????// 表現(xiàn)為Xml節(jié)點。<AreaId>...</AreaId>
    public string Id

    [XmlArrayAttribute("Areas")]????// 表現(xiàn)為Xml層次結(jié)構(gòu),根為Areas,其所屬的每個該集合節(jié)點元素名為類名。<Areas><Area ... /><Area ... /></Areas>
    public Area[] Areas

    [XmlElementAttribute("Area", IsNullable = false)]????// 表現(xiàn)為水平結(jié)構(gòu)的Xml節(jié)點。<Area ... /><Area ... />...
    public Area[] Areas

    [XmlIgnoreAttribute]????// 忽略該元素的序列化。

    把這些屬性與model類的相關(guān)屬性,配合使用,就可以自由設(shè)置相關(guān)XML的具體格式了。

    綜合示例:將班級信息序列化成XML

    示例要求:

    (1)每個XML節(jié)點以“My”開頭。

    (2)班級ID和學(xué)生ID字段以XML節(jié)點屬性表現(xiàn),其它字段以XML節(jié)點的形式表現(xiàn)。

    (3)由于學(xué)生的郵箱涉及敏感信息,所以不參與序列化。

    2.1 創(chuàng)建班級信息類(ClassInfo.cs)

  • using System.Collections.Generic;

  • using System.Xml.Serialization;

  • ?
  • /// <summary>

  • /// 班級信息類

  • /// </summary>

  • [XmlRootAttribute("MyClassInfo", Namespace = "ABC_123", IsNullable = false)]

  • public class ClassInfo

  • {

  • /// <summary>

  • /// 班級ID

  • /// </summary>

  • [XmlAttribute("MyClassID")]

  • public int ClassID { get; set; }

  • ?
  • /// <summary>

  • /// 班級名稱

  • /// </summary>

  • [XmlElementAttribute("MyClassName", IsNullable = false)]

  • public string ClassName { get; set; }

  • ?
  • /// <summary>

  • /// 班長人

  • /// </summary>

  • [XmlElementAttribute("MyTeacher", IsNullable = false)]

  • public string Teacher { get; set; }

  • ?
  • /// <summary>

  • /// 學(xué)生列表

  • /// </summary>

  • [XmlArrayAttribute("MyStudents")]

  • public List<Student> StudentList { get; set; }

  • }

  • 2.2 創(chuàng)建學(xué)生信息類(Student.cs)

  • using System.Xml.Serialization;

  • ?
  • /// <summary>

  • /// 學(xué)生信息類

  • /// </summary>

  • [XmlRootAttribute("MyStudent", IsNullable = false)]

  • public class Student

  • {

  • /// <summary>

  • /// 學(xué)生ID

  • /// </summary>

  • [XmlAttribute("MyStuID")]

  • public int StuID { get; set; }

  • ?
  • /// <summary>

  • /// 學(xué)生名稱

  • /// </summary>

  • [XmlElementAttribute("MyStuName", IsNullable = false)]

  • public string StuName { get; set; }

  • ?
  • /// <summary>

  • /// 性別

  • /// </summary>

  • [XmlElementAttribute("MySex", IsNullable = false)]

  • public string Sex { get; set; }

  • ?
  • /// <summary>

  • /// 郵箱

  • /// </summary>

  • [XmlIgnoreAttribute]

  • public string Email { get; set; }

  • }

  • 2.3?將班級信息轉(zhuǎn)換成XML

  • /// <summary>

  • /// 將班級信息轉(zhuǎn)換成XML

  • /// </summary>

  • public static void ClassInfoToXml()

  • {

  • //獲取班級信息

  • ClassInfo classInfo = GetClassInfo();

  • ?
  • //將班級信息轉(zhuǎn)換成XML

  • string classXml = XmlSerializeHelper.XmlSerialize(classInfo);

  • }

  • ?
  • /// <summary>

  • /// 獲取班級信息

  • /// </summary>

  • public static ClassInfo GetClassInfo()

  • {

  • //創(chuàng)建班級信息

  • ClassInfo classInfo = new ClassInfo();

  • classInfo.ClassID = 1;

  • classInfo.ClassName = "高一(5)班";

  • classInfo.Teacher = "李老師";

  • ?
  • //創(chuàng)建學(xué)生列表

  • List<Student> studentList = new List<Student>();

  • studentList.Add(new Student() { StuID = 1, StuName = "張三", Sex = "男", Email = "zhangsan@mail.com" });

  • studentList.Add(new Student() { StuID = 2, StuName = "李四", Sex = "女", Email = "lisi@mail.com" });

  • studentList.Add(new Student() { StuID = 3, StuName = "王五", Sex = "男", Email = "wangwu@mail.com" });

  • classInfo.StudentList = studentList;

  • ?
  • return classInfo;

  • }

  • XML結(jié)果:

  • <?xml version="1.0" encoding="utf-16"?>

  • <MyClassInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" MyClassID="1" xmlns="ABC_123">

  • <MyClassName>高一(5)班</MyClassName>

  • <MyTeacher>李老師</MyTeacher>

  • <MyStudents>

  • <Student MyStuID="1">

  • <MyStuName>張三</MyStuName>

  • <MySex>男</MySex>

  • </Student>

  • <Student MyStuID="2">

  • <MyStuName>李四</MyStuName>

  • <MySex>女</MySex>

  • </Student>

  • <Student MyStuID="3">

  • <MyStuName>王五</MyStuName>

  • <MySex>男</MySex>

  • </Student>

  • </MyStudents>

  • </MyClassInfo>

  • ?

    總結(jié)

    以上是生活随笔為你收集整理的C#实现实体类和XML相互转换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。