最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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

對象的三者的代碼為:

復(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;
    }


基于以上三者的對應(yīng)關(guān)系,編寫對應(yīng)的調(diào)用函數(shù),實(shí)現(xiàn)對應(yīng)的對象和XMl文件的轉(zhuǎn)換,對應(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","測試團(tuán)隊"));
          dep.Teams.Add(newTeam("Develop","開發(fā)團(tuán)隊"));
          dep["Test"].Persons =new List<Person>();
          dep["Test"].Persons.Add(newPerson("dwf", 22,"程序", "測試工程師"));
          dep["Test"].Persons.Add(newPerson("WL", 22,"代碼", "測試工程師"));
          dep["Develop"].Persons.Add(newPerson("dwf", 22,"程序", "開發(fā)工程師"));
          dep["Develop"].Persons.Add(newPerson("WL", 22,"代碼", "高級開發(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>測試團(tuán)隊</Title>
      <Persons>
        <Person>
          <Name>dwf</Name>
          <Age>22</Age>
          <Hobby>程序</Hobby>
          <Station>測試工程師</Station>
        </Person>
        <Person>
          <Name>WL</Name>
          <Age>22</Age>
          <Hobby>代碼</Hobby>
          <Station>測試工程師</Station>
        </Person>
      </Persons>
    </Team>
    <Team>
      <Name>Develop</Name>
      <Title>開發(fā)團(tuán)隊</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>高級開發(fā)工程師</Station>
        </Person>
      </Persons>
    </Team>
  </Teams>
</Department>

通過以上方式生成的Xml文件也保存了對應(yīng)對象的屬性以及對應(yīng)的包含的成員的信息,但是XMl文件里面對于對象的所有屬性都是通過添加對應(yīng)的子節(jié)點(diǎn)進(jìn)行展示的,當(dāng)通常我們對應(yīng)XMl文件的組織,當(dāng)對應(yīng)的成員為對應(yīng)對象的屬性信息時我們更多的是希望對應(yīng)的屬性信息節(jié)點(diǎn)來設(shè)置對應(yīng)的屬性信息。為此,開始查找對應(yīng)的序列化操作的時候是否提供了對應(yīng)的設(shè)置方法來修改對應(yīng)的節(jié)點(diǎn)信息為屬性信息,通過查找,發(fā)現(xiàn)可以通過對對應(yīng)的屬性節(jié)點(diǎn),添加自定義屬性,設(shè)置對應(yīng)的對象屬性保存為XMl文件時的格式以及對應(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修改后的對應(yīng)代碼,同樣對于Teams和Person的代碼也可以采用相同的方式對對象的屬性進(jìn)行修改,其中對應(yīng)的轉(zhuǎn)換后屬性的設(shè)置,不僅可以設(shè)置對應(yīng)的轉(zhuǎn)換后節(jié)點(diǎn)的類型還可以設(shè)置對應(yīng)轉(zhuǎn)換后的節(jié)點(diǎn)的名稱和對應(yīng)的屬性的名稱不相同,具體的設(shè)置可操作幫助文檔。

對應(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="測試團(tuán)隊">
      <Persons>
        <Person Name="dwf" Age="22" Hobby="程序" Station="測試工程師" />
        <Person Name="WL" Age="22" Hobby="代碼" Station="測試工程師" />
      </Persons>
    </Team>
    <Team Name="Develop" Title="開發(fā)團(tuán)隊">
      <Persons>
        <Person Name="dwf22" Age="22" Hobby="程序" Station="開發(fā)工程師" />
        <Person Name="WL33" Age="22" Hobby="代碼" Station="高級開發(fā)工程師" />
      </Persons>
    </Team>
  </Teams>
</Department>

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

相關(guān)文章

最新評論

甘谷县| 丹凤县| 新兴县| 紫云| 奈曼旗| 福贡县| 临沧市| 平阳县| 卢氏县| 白水县| 蒙城县| 全椒县| 石首市| 石家庄市| 湄潭县| 壤塘县| 太康县| 灵璧县| 金寨县| 永城市| 遂宁市| 鸡西市| 潼关县| 上栗县| 项城市| 左权县| 华安县| 朝阳区| 龙川县| 武夷山市| 河曲县| 饶平县| 峡江县| 芦山县| 秦安县| 年辖:市辖区| 迁西县| 久治县| 鄯善县| 嘉鱼县| 武乡县|