欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#對(duì)象與XMl文件之間的相互轉(zhuǎn)換

 更新時(shí)間:2013年10月29日 08:47:17   作者:  
本文是對(duì)C#中對(duì)象與XMl文件之間的相互轉(zhuǎn)換進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助

C#提供三種序列化方式,分別為:
1、是使用BinaryFormatter進(jìn)行串行化;

2、使用SoapFormatter進(jìn)行串行化;

3、使用XmlSerializer進(jìn)行串行化。
其中對(duì)于BinaryFormatter的方式需要實(shí)現(xiàn)ISerializable接口,而XmlSeriializ不需要實(shí)現(xiàn)對(duì)應(yīng)的接口,可以直接序列化。在這里面我們主要采用XMlSerialize來實(shí)現(xiàn)對(duì)應(yīng)的序列化操作進(jìn)而實(shí)現(xiàn)對(duì)應(yīng)的對(duì)象和XMl文件之間的轉(zhuǎn)換關(guān)系。

在通過序列化實(shí)現(xiàn)對(duì)應(yīng)的轉(zhuǎn)換關(guān)系操作的功能時(shí),我首先創(chuàng)建了Department ,teams,Person三個(gè)對(duì)象,并設(shè)置了對(duì)應(yīng)對(duì)象之間的關(guān)系,建立的三個(gè)對(duì)象以及他們之間的對(duì)應(yīng)關(guān)系模型如下圖所示:

對(duì)象的三者的代碼為:

復(fù)制代碼 代碼如下:

public class Department
    {
        public Department()
        {
        }
        public string Name;
        public List<Team> Teams;
        public Team this[string Name]
        {
            get
            {
                Team t = null;
                foreach (Team te in Teams)
                {
                    if (string.Compare(te.Name, Name) == 0)
                    {
                        t = te;
                        break;
                    }
                }
                return t;
            }
        }
    }

  public  class Team
    {
        public Team()
        {

        }
        public Team(string Name,string Title)
        {
            this.Name = Name;
            this.Title = Title;
        }
        public string Name;
        public string Title;
        public List<Person> Persons;

    }

 public  class Person
    {
        public Person()
        {

        }
        public Person(string Name,int Age,string Hobby,string Station)
        {
            this.Name = Name;
            this.Age = Age;
            this.Hobby = Hobby;
            this.Station = Station;
        }
        public string Name;
        public int Age;
        public string Hobby;
        public string Station;
    }


基于以上三者的對(duì)應(yīng)關(guān)系,編寫對(duì)應(yīng)的調(diào)用函數(shù),實(shí)現(xiàn)對(duì)應(yīng)的對(duì)象和XMl文件的轉(zhuǎn)換,對(duì)應(yīng)的實(shí)現(xiàn)轉(zhuǎn)換的代碼為:
復(fù)制代碼 代碼如下:

public static void Main()
      {
          Department dep =new Department();
          dep.Name ="事業(yè)部";
          dep.Teams =new List<Team>();
          dep.Teams.Add(newTeam("Test","測(cè)試團(tuán)隊(duì)"));
          dep.Teams.Add(newTeam("Develop","開發(fā)團(tuán)隊(duì)"));
          dep["Test"].Persons =new List<Person>();
          dep["Test"].Persons.Add(newPerson("dwf", 22,"程序", "測(cè)試工程師"));
          dep["Test"].Persons.Add(newPerson("WL", 22,"代碼", "測(cè)試工程師"));
          dep["Develop"].Persons.Add(newPerson("dwf", 22,"程序", "開發(fā)工程師"));
          dep["Develop"].Persons.Add(newPerson("WL", 22,"代碼", "高級(jí)開發(fā)工程師"));

           XmlSerializer serializer =new XmlSerializer(dep.GetType());
          TextWriter writer =new StreamWriter("Department.xml");
          serializer.Serialize(writer, oSer);
          writer.Close();
      }

生成的XMl文件的格式為:
復(fù)制代碼 代碼如下:

<?xml version="1.0"encoding="utf-8"?>
<Department xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Name>事業(yè)部</Name>
  <Teams>
    <Team>
      <Name>Test</Name>
      <Title>測(cè)試團(tuán)隊(duì)</Title>
      <Persons>
        <Person>
          <Name>dwf</Name>
          <Age>22</Age>
          <Hobby>程序</Hobby>
          <Station>測(cè)試工程師</Station>
        </Person>
        <Person>
          <Name>WL</Name>
          <Age>22</Age>
          <Hobby>代碼</Hobby>
          <Station>測(cè)試工程師</Station>
        </Person>
      </Persons>
    </Team>
    <Team>
      <Name>Develop</Name>
      <Title>開發(fā)團(tuán)隊(duì)</Title>
      <Persons>
        <Person>
          <Name>dwf22</Name>
          <Age>22</Age>
          <Hobby>程序</Hobby>
          <Station>開發(fā)工程師</Station>
        </Person>
        <Person>
          <Name>WL33</Name>
          <Age>22</Age>
          <Hobby>代碼</Hobby>
          <Station>高級(jí)開發(fā)工程師</Station>
        </Person>
      </Persons>
    </Team>
  </Teams>
</Department>

通過以上方式生成的Xml文件也保存了對(duì)應(yīng)對(duì)象的屬性以及對(duì)應(yīng)的包含的成員的信息,但是XMl文件里面對(duì)于對(duì)象的所有屬性都是通過添加對(duì)應(yīng)的子節(jié)點(diǎn)進(jìn)行展示的,當(dāng)通常我們對(duì)應(yīng)XMl文件的組織,當(dāng)對(duì)應(yīng)的成員為對(duì)應(yīng)對(duì)象的屬性信息時(shí)我們更多的是希望對(duì)應(yīng)的屬性信息節(jié)點(diǎn)來設(shè)置對(duì)應(yīng)的屬性信息。為此,開始查找對(duì)應(yīng)的序列化操作的時(shí)候是否提供了對(duì)應(yīng)的設(shè)置方法來修改對(duì)應(yīng)的節(jié)點(diǎn)信息為屬性信息,通過查找,發(fā)現(xiàn)可以通過對(duì)對(duì)應(yīng)的屬性節(jié)點(diǎn),添加自定義屬性,設(shè)置對(duì)應(yīng)的對(duì)象屬性保存為XMl文件時(shí)的格式以及對(duì)應(yīng)的XMl節(jié)點(diǎn)的名稱。

修改后的代碼為:

復(fù)制代碼 代碼如下:

public class Department
    {
        public Department()
        {
        }
        [XmlAttribute]
        public string Name;
        public List<Team> Teams;
        public Team this[string Name]
        {
            get
            {
                Team t = null;
                foreach (Team te in Teams)
                {
                    if (string.Compare(te.Name, Name) == 0)
                    {
                        t = te;
                        break;
                    }
                }
                return t;
            }
        }
    }

以上只是Department修改后的對(duì)應(yīng)代碼,同樣對(duì)于Teams和Person的代碼也可以采用相同的方式對(duì)對(duì)象的屬性進(jìn)行修改,其中對(duì)應(yīng)的轉(zhuǎn)換后屬性的設(shè)置,不僅可以設(shè)置對(duì)應(yīng)的轉(zhuǎn)換后節(jié)點(diǎn)的類型還可以設(shè)置對(duì)應(yīng)轉(zhuǎn)換后的節(jié)點(diǎn)的名稱和對(duì)應(yīng)的屬性的名稱不相同,具體的設(shè)置可操作幫助文檔。

對(duì)應(yīng)的轉(zhuǎn)換后的XMl文件為:

復(fù)制代碼 代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<Department xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Name="事業(yè)部">
  <Teams>
    <Team Name="Test" Title="測(cè)試團(tuán)隊(duì)">
      <Persons>
        <Person Name="dwf" Age="22" Hobby="程序" Station="測(cè)試工程師" />
        <Person Name="WL" Age="22" Hobby="代碼" Station="測(cè)試工程師" />
      </Persons>
    </Team>
    <Team Name="Develop" Title="開發(fā)團(tuán)隊(duì)">
      <Persons>
        <Person Name="dwf22" Age="22" Hobby="程序" Station="開發(fā)工程師" />
        <Person Name="WL33" Age="22" Hobby="代碼" Station="高級(jí)開發(fā)工程師" />
      </Persons>
    </Team>
  </Teams>
</Department>

通過以上方式便實(shí)現(xiàn)了將對(duì)應(yīng)的對(duì)象轉(zhuǎn)換為XMl文件的功能,同樣通過反序列化的方式,可以實(shí)現(xiàn)將對(duì)應(yīng)的XMl文件轉(zhuǎn)換為對(duì)應(yīng)的對(duì)象。實(shí)現(xiàn)的代碼為:
復(fù)制代碼 代碼如下:

  XmlSerializer serializer = new XmlSerializer(t);
            FileStream  stream = new FileStream (filePath,FileMode.Open );
            Department  dep=(Department)serializer.Deserialize(stream);
            stream.Close();  

這樣便通過XMl序列化的方式實(shí)現(xiàn)了對(duì)應(yīng)的對(duì)象和Xml文件之間的轉(zhuǎn)換關(guān)系,而且對(duì)應(yīng)的對(duì)象的屬性和轉(zhuǎn)換后的XMl文件中的節(jié)點(diǎn)的名稱之間的對(duì)應(yīng)關(guān)系是可以進(jìn)行設(shè)置的。這樣第一篇中介紹的同樣Xml文件的配置工具的實(shí)現(xiàn),相當(dāng)于是實(shí)現(xiàn)了對(duì)應(yīng)的Xml序列化的功能,從使用的過程中可以發(fā)現(xiàn),第一篇文章中介紹的實(shí)現(xiàn)就是對(duì)應(yīng)的Xml序列化類的實(shí)現(xiàn)方式。

相關(guān)文章

  • C#定時(shí)器實(shí)現(xiàn)自動(dòng)執(zhí)行的方法

    C#定時(shí)器實(shí)現(xiàn)自動(dòng)執(zhí)行的方法

    這篇文章主要介紹了C#定時(shí)器實(shí)現(xiàn)自動(dòng)執(zhí)行的方法,實(shí)例分析了C#定時(shí)器參數(shù)的設(shè)置及方法的調(diào)用與實(shí)現(xiàn),需要的朋友可以參考下
    2015-01-01
  • C# SQlite操作方法小結(jié)

    C# SQlite操作方法小結(jié)

    這篇文章主要介紹了C# SQlite操作方法,較為詳細(xì)的講述了SQLite的下載與C#針對(duì)SQLite的連接、創(chuàng)建、與執(zhí)行SQL語句等操作相關(guān)技巧,需要的朋友可以參考下
    2016-07-07
  • C#串口通信工具類的封裝

    C#串口通信工具類的封裝

    這篇文章主要為大家詳細(xì)介紹了C#串口通信工具類封裝,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • C# 操作符之二 算數(shù)操作符

    C# 操作符之二 算數(shù)操作符

    算數(shù)操作符+,-,*,/,%,的用法和大多程序設(shè)計(jì)語言是相同的,%號(hào)的作用是整數(shù)除法中產(chǎn)生余數(shù),而整數(shù)法會(huì)直接去掉小數(shù)部分,而不是四舍五入。
    2011-02-02
  • C#實(shí)現(xiàn)批量壓縮和解壓縮的示例代碼

    C#實(shí)現(xiàn)批量壓縮和解壓縮的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)批量壓縮和解壓縮的功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12
  • C#微信開發(fā)之接收 / 返回文本消息

    C#微信開發(fā)之接收 / 返回文本消息

    本文主要介紹了C#微信開發(fā)之接收 / 返回文本消息原理與實(shí)現(xiàn)方法,具有一定的參考價(jià)值,下面跟著小編一起來看下吧
    2017-02-02
  • C# 拼圖魔方小游戲

    C# 拼圖魔方小游戲

    這篇文章主要介紹了C# 拼圖魔方小游戲,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • C#使用GZipStream解壓縮數(shù)據(jù)文件的方法

    C#使用GZipStream解壓縮數(shù)據(jù)文件的方法

    這篇文章主要介紹了C#使用GZipStream解壓縮數(shù)據(jù)文件的方法,實(shí)例分析了C#中GZipStream方法的原理與使用技巧,需要的朋友可以參考下
    2015-04-04
  • C#雙緩沖技術(shù)實(shí)例詳解

    C#雙緩沖技術(shù)實(shí)例詳解

    這篇文章主要介紹了C#雙緩沖技術(shù),結(jié)合實(shí)例形式較為詳細(xì)的分析了C#雙緩沖的功能,實(shí)現(xiàn)技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2016-02-02
  • C#使?XmlReader和XmlWriter操作XML?件

    C#使?XmlReader和XmlWriter操作XML?件

    這篇文章介紹了C#使?XmlReader和XmlWriter操作XML?件的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06

最新評(píng)論