国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

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

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

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

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

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

在通過序列化實現(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ù),實現(xiàn)對應(yīng)的對象和XMl文件的轉(zhuǎn)換,對應(yīng)的實現(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","測試團隊"));
          dep.Teams.Add(newTeam("Develop","開發(fā)團隊"));
          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>測試團隊</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ā)團隊</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é)點進(jìn)行展示的,當(dāng)通常我們對應(yīng)XMl文件的組織,當(dāng)對應(yīng)的成員為對應(yīng)對象的屬性信息時我們更多的是希望對應(yīng)的屬性信息節(jié)點來設(shè)置對應(yīng)的屬性信息。為此,開始查找對應(yīng)的序列化操作的時候是否提供了對應(yīng)的設(shè)置方法來修改對應(yīng)的節(jié)點信息為屬性信息,通過查找,發(fā)現(xiàn)可以通過對對應(yīng)的屬性節(jié)點,添加自定義屬性,設(shè)置對應(yīng)的對象屬性保存為XMl文件時的格式以及對應(yīng)的XMl節(jié)點的名稱。

修改后的代碼為:

復(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é)點的類型還可以設(shè)置對應(yīng)轉(zhuǎn)換后的節(jié)點的名稱和對應(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="測試團隊">
      <Persons>
        <Person Name="dwf" Age="22" Hobby="程序" Station="測試工程師" />
        <Person Name="WL" Age="22" Hobby="代碼" Station="測試工程師" />
      </Persons>
    </Team>
    <Team Name="Develop" Title="開發(fā)團隊">
      <Persons>
        <Person Name="dwf22" Age="22" Hobby="程序" Station="開發(fā)工程師" />
        <Person Name="WL33" Age="22" Hobby="代碼" Station="高級開發(fā)工程師" />
      </Persons>
    </Team>
  </Teams>
</Department>

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

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

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 彩票| 太原市| 双柏县| 鲁山县| 泸定县| 东阿县| 延寿县| 新源县| 十堰市| 新竹市| 洪洞县| 句容市| 曲靖市| 墨竹工卡县| 饶河县| 长乐市| 周口市| 三门峡市| 洮南市| 永嘉县| 商南县| 鲁山县| 彰化市| 泌阳县| 眉山市| 宁河县| 合江县| 阿荣旗| 雅安市| 石屏县| 陇西县| 泰州市| 铁岭县| 怀宁县| 玉树县| 毕节市| 新干县| 油尖旺区| 武平县| 新乡市| 德保县|