亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C#中實(shí)體類(lèi)與XML相互轉(zhuǎn)換方式

 更新時(shí)間:2023年07月12日 15:23:49   作者:pan_junbiao  
這篇文章主要介紹了C#中實(shí)體類(lèi)與XML相互轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

1、實(shí)體類(lèi)與XML相互轉(zhuǎn)換

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

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

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

using System;
using System.IO;
using System.Xml.Serialization;
/// <summary>
/// XML序列化公共處理類(lèi)
/// </summary>
public static class XmlSerializeHelper
{
    /// <summary>
    /// 將實(shí)體對(duì)象轉(zhuǎn)換成XML
    /// </summary>
    /// <typeparam name="T">實(shí)體類(lèi)型</typeparam>
    /// <param name="obj">實(shí)體對(duì)象</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("將實(shí)體對(duì)象轉(zhuǎn)換成XML異常", ex);
        }
    }
    /// <summary>
    /// 將XML轉(zhuǎn)換成實(shí)體對(duì)象
    /// </summary>
    /// <typeparam name="T">實(shí)體類(lèi)型</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)換成實(shí)體對(duì)象異常", ex);
        }
    }
}

創(chuàng)建用戶(hù)信息類(lèi),用于示例使用。

/// <summary>
/// 用戶(hù)信息類(lèi)
/// </summary>
public class UserInfo
{
    /// <summary>
    /// 編號(hào)
    /// </summary>
    public int ID { get; set; }
    /// <summary>
    /// 名稱(chēng)
    /// </summary>
    public string Name { get; set; }
    /// <summary>
    /// 創(chuàng)建時(shí)間
    /// </summary>
    public DateTime? CreateTime { get; set; }
}

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

/// <summary>
/// 將List與XML相互轉(zhuǎn)換
/// </summary>
public static void ListToXmlTest()
{
    //獲取用戶(hù)列表
    List<UserInfo> userList = GetUserList();
    //將實(shí)體對(duì)象轉(zhuǎn)換成XML
    string xmlResult = XmlSerializeHelper.XmlSerialize(userList);
    //將XML轉(zhuǎn)換成實(shí)體對(duì)象
    List<UserInfo> deResult = XmlSerializeHelper.DESerializer<List<UserInfo>>(xmlResult);
}
/// <summary>
/// 獲取用戶(hù)信息列表
/// </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對(duì)象
    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對(duì)象
/// </summary>
public static DataTable CreateDataTable()
{
    //創(chuàng)建DataTable
    DataTable dt = new DataTable("NewDt");
    //創(chuàng)建自增長(zhǎ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講解說(shuō)明

[XmlRootAttribute("MyCity", Namespace="abc.abc", IsNullable=false)]?????// 當(dāng)該類(lèi)為Xml根節(jié)點(diǎn)時(shí),以此為根節(jié)點(diǎn)名稱(chēng)。public class City
[XmlAttribute("AreaName")]????// 表現(xiàn)為Xml節(jié)點(diǎn)屬性。<... AreaName="..."/>public string Name
[XmlElementAttribute("AreaId", IsNullable = false)]????// 表現(xiàn)為Xml節(jié)點(diǎn)。<AreaId>...</AreaId>public string Id
[XmlArrayAttribute("Areas")]????// 表現(xiàn)為Xml層次結(jié)構(gòu),根為Areas,其所屬的每個(gè)該集合節(jié)點(diǎn)元素名為類(lèi)名。<Areas><Area ... /><Area ... /></Areas>public Area[] Areas
[XmlElementAttribute("Area", IsNullable = false)]????// 表現(xiàn)為水平結(jié)構(gòu)的Xml節(jié)點(diǎn)。<Area ... /><Area ... />...public Area[] Areas
[XmlIgnoreAttribute]????// 忽略該元素的序列化。

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

綜合示例:將班級(jí)信息序列化成XML

示例要求:

(1)每個(gè)XML節(jié)點(diǎn)以“My”開(kāi)頭。

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

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

2.1 創(chuàng)建班級(jí)信息類(lèi)(ClassInfo.cs)

using System.Collections.Generic;
using System.Xml.Serialization;
/// <summary>
/// 班級(jí)信息類(lèi)
/// </summary>
[XmlRootAttribute("MyClassInfo", Namespace = "ABC_123", IsNullable = false)] 
public class ClassInfo
{
    /// <summary>
    /// 班級(jí)ID
    /// </summary>
    [XmlAttribute("MyClassID")]
    public int ClassID { get; set; }
    /// <summary>
    /// 班級(jí)名稱(chēng)
    /// </summary>
    [XmlElementAttribute("MyClassName", IsNullable = false)] 
    public string ClassName { get; set; }
    /// <summary>
    /// 班長(zhǎng)人
    /// </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é)生信息類(lèi)(Student.cs)

using System.Xml.Serialization;
/// <summary>
/// 學(xué)生信息類(lèi)
/// </summary>
[XmlRootAttribute("MyStudent", IsNullable = false)] 
public class Student
{
    /// <summary>
    /// 學(xué)生ID
    /// </summary>
    [XmlAttribute("MyStuID")]
    public int StuID { get; set; }
    /// <summary>
    /// 學(xué)生名稱(chēng)
    /// </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 將班級(jí)信息轉(zhuǎn)換成XML

/// <summary>
/// 將班級(jí)信息轉(zhuǎn)換成XML
/// </summary>
public static void ClassInfoToXml()
{
    //獲取班級(jí)信息
    ClassInfo classInfo = GetClassInfo();
    //將班級(jí)信息轉(zhuǎn)換成XML
    string classXml = XmlSerializeHelper.XmlSerialize(classInfo);
}
/// <summary>
/// 獲取班級(jí)信息
/// </summary>
public static ClassInfo GetClassInfo()
{
    //創(chuàng)建班級(jí)信息
    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é)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。 

相關(guān)文章

  • 解決WPF附加屬性的Set函數(shù)不調(diào)用的問(wèn)題

    解決WPF附加屬性的Set函數(shù)不調(diào)用的問(wèn)題

    這篇文章介紹了解決WPF附加屬性的Set函數(shù)不調(diào)用的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • C# 如何調(diào)用C++ dll string類(lèi)型返回

    C# 如何調(diào)用C++ dll string類(lèi)型返回

    這篇文章主要介紹了C# 如何調(diào)用C++ dll string類(lèi)型返回問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C#留言時(shí)間格式化

    C#留言時(shí)間格式化

    本文給大家分享的是仿微博或者空間中,發(fā)布內(nèi)容之后提示NN秒之前留言的代碼,主要是通過(guò)發(fā)布時(shí)間和當(dāng)前時(shí)間直接的差值來(lái)計(jì)算,十分的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下。
    2015-05-05
  • C#中DateTime的時(shí)間加減法操作小結(jié)

    C#中DateTime的時(shí)間加減法操作小結(jié)

    本文主要介紹了C#中DateTime的時(shí)間加減法操作小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • C#連接ClickHouse數(shù)據(jù)庫(kù)的步驟指南

    C#連接ClickHouse數(shù)據(jù)庫(kù)的步驟指南

    在 C# 中連接 ClickHouse 數(shù)據(jù)庫(kù),您可以使用 ClickHouse.Client 庫(kù),這個(gè)庫(kù)提供了對(duì) ClickHouse 數(shù)據(jù)庫(kù)的高效訪(fǎng)問(wèn),以下是詳細(xì)的步驟指南,幫助您在 C# 項(xiàng)目中連接和操作 ClickHouse 數(shù)據(jù)庫(kù),需要的朋友可以參考下
    2024-12-12
  • C#中實(shí)現(xiàn)輸入漢字獲取其拼音(漢字轉(zhuǎn)拼音)的2種方法

    C#中實(shí)現(xiàn)輸入漢字獲取其拼音(漢字轉(zhuǎn)拼音)的2種方法

    這篇文章主要介紹了C#中實(shí)現(xiàn)輸入漢字獲取其拼音(漢字轉(zhuǎn)拼音)的2種方法,本文分別給出了使用微軟語(yǔ)言包、手動(dòng)編碼實(shí)現(xiàn)兩種實(shí)現(xiàn)方式,需要的朋友可以參考下
    2015-01-01
  • C#實(shí)現(xiàn)串口通信詳解

    C#實(shí)現(xiàn)串口通信詳解

    串口通信(Serial Communications)是指外設(shè)和計(jì)算機(jī)間通過(guò)數(shù)據(jù)信號(hào)線(xiàn)、地線(xiàn)等按位(bit)進(jìn)行傳輸數(shù)據(jù)的一種通信方式,屬于串行通信方式,能夠?qū)崿F(xiàn)遠(yuǎn)距離通信,本文給大家介紹了C#串口通信總結(jié),需要的朋友可以參考下
    2024-12-12
  • Unity實(shí)現(xiàn)物體沿自身的任意軸向旋轉(zhuǎn)

    Unity實(shí)現(xiàn)物體沿自身的任意軸向旋轉(zhuǎn)

    這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)物體沿自身的任意軸向旋轉(zhuǎn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-01-01
  • C#中通過(guò)反射將枚舉元素加載到ComboBo的實(shí)現(xiàn)方法

    C#中通過(guò)反射將枚舉元素加載到ComboBo的實(shí)現(xiàn)方法

    本文主要介紹了C#中通過(guò)反射將枚舉元素加載到ComboBo的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • C#判斷單詞個(gè)數(shù)方法總結(jié)

    C#判斷單詞個(gè)數(shù)方法總結(jié)

    我們給大家總計(jì)了C#中判斷英文單詞個(gè)數(shù)的方法以及排序的技巧,對(duì)此有需要的朋友可以測(cè)試下。
    2018-03-03

最新評(píng)論