a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C# > 正文

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

2020-01-24 03:06:11
字體:
供稿:網(wǎng)友

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)方式。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 一区二区免费播放 | 亚洲精品免费视频 | www精品 | 在线观看免费视频日韩 | 色网在线| 日韩精品一区二区三区视频播放 | 国产日韩中文字幕 | 久草毛片 | 欧美一区视频在线 | 欧美99 | 国产精品高潮99久久久久久久 | 最新日韩av | 日韩成人精品视频 | 北条麻妃国产九九九精品小说 | 深夜成人小视频 | 91社区在线观看高清 | 婷婷色在线 | 91福利电影在线观看 | 亚洲电影在线观看 | 成人亚洲视频 | 日韩和的一区二区 | 国产免费av一区二区三区 | 精品中文字幕在线观看 | av一区二区三区四区 | 看免费av | 日日操天天操 | 成人在线视频观看 | 国产伦精品一区二区三区在线 | 日韩午夜激情 | 一区二区免费在线播放 | 久久久久无码国产精品一区 | 国产一区二区三区四区在线观看 | 国产中文视频 | 国产一级在线观看 | 亚洲视频中文字幕 | 亚洲电影一区二区三区 | 亚洲三区在线观看 | 欧美日韩高清在线一区 | 午夜精品久久久久久久久久蜜桃 | 亚洲欧洲视频在线 | 日本色道视频 |