淺析C# XmlSerializer概念及作用
談到C# XmlSerializer類自然會(huì)聯(lián)系到序列化的問題,那么我們首先明白序列化其實(shí)就是是將對(duì)象轉(zhuǎn)換為容易傳輸?shù)母袷降倪^程。那么它是如何發(fā)揮作用的呢?讓我們來一一講述。
C# XmlSerializer類的理解:
例如,可以序列化一個(gè)對(duì)象,然后使用 HTTP 通過Internet 在客戶端和服務(wù)器之間傳輸該對(duì)象。在另一端,反序列化將從該流重新構(gòu)造對(duì)象。
XML序列化僅將對(duì)象的公共字段和屬性值序列化為 XML 流。XML 序列化不包括類型信息。例如,如果您有一個(gè)存在于 Library 命名空間中的 Book 對(duì)象,將不能保證它將會(huì)被反序列化為同一類型的對(duì)象。
注意:XML 序列化不轉(zhuǎn)換方法、索引器、私有字段或只讀屬性(只讀集合除外)。若要序列化對(duì)象的所有字段和屬性(公共的和私有的),請(qǐng)使用 BinaryFormatter,而不要使用 XML 序列化。
C# XmlSerializer類的使用:
XML序列化中最主要的類是XmlSerializer類,它的最重要的方法是 Serialize 和 Deserialize 方法。XmlSerializer 生成的 XML 流符合萬維網(wǎng)聯(lián)合會(huì) (http://www.w3.org/) XML 架構(gòu)定義語言 (XSD) 1.0 的建議。另外,生成的數(shù)據(jù)類型符合標(biāo)題為“XML Schema Part 2: Datatypes”(XML 架構(gòu)第二部分:數(shù)據(jù)類型)的文檔。
對(duì)象中的數(shù)據(jù)是用編程語言構(gòu)造(如類、字段、屬性、基元類型、數(shù)組,甚至 XmlElement 或 XmlAttribute 對(duì)象形式的嵌入 XML)來描述的。您可以創(chuàng)建自己的用屬性批注的類,或者使用 XML 架構(gòu)定義工具生成基于現(xiàn)有 XML 架構(gòu)的類。
C# XmlSerializer類作用原理理解:
如果您有 XML 架構(gòu),就可運(yùn)行 XML 架構(gòu)定義工具生成一組強(qiáng)類型化為架構(gòu)并用屬性批注的類。當(dāng)序列化這樣的類的實(shí)例時(shí),生成的 XML 符合 XML 架構(gòu)。使用這樣的類,就可針對(duì)容易操作的對(duì)象模型進(jìn)行編程,同時(shí)確保生成的 XML 符合 XML 架構(gòu)。這是使用 .NET Framework 中的其他類(如 XmlReader 和 XmlWriter 類)分析和寫 XML 流的一種替換方法。(有關(guān)使用這些類的更多信息,請(qǐng)參見使用 .NET Framework 中的 XML。)這些類使您可以分析任何 XML 流。與此相反,當(dāng)需要 XML 流符合已知的 XML 架構(gòu)時(shí),請(qǐng)使用 XmlSerializer。
屬性控制由 XmlSerializer 類生成的 XML 流,使您可以設(shè)置 XML 流的 XML 命名空間、元素名、屬性名等。有關(guān)這些屬性和它們?nèi)绾慰刂?XML 序列化的更多信息,請(qǐng)參見使用屬性控制 XML 序列化。若想獲得一個(gè)列示對(duì)所生成的 XML 起控制作用的那些屬性的表,請(qǐng)參見控制 XML 序列化的屬性。
XmlSerializer 類可進(jìn)一步序列化對(duì)象并生成編碼的 SOAP XML 流。生成的 XML 符合標(biāo)題為“Simple Object Access Protocol (SOAP) 1.1”的萬維網(wǎng)聯(lián)合會(huì)文檔的第 5 節(jié)。有關(guān)此過程的更多信息,請(qǐng)參見用 XML 序列化生成 SOAP 消息。
XmlSerializer 類生成由 XML Web services 創(chuàng)建和傳遞給 XML Web services 的 SOAP 消息。若要控制 SOAP 消息,可將屬性應(yīng)用于 XML Web services 文件 (.asmx) 中的類、返回值、參數(shù)和字段。您可以同時(shí)使用在“控制 XML 序列化的屬性”中列出的屬性和在“控制編碼的 SOAP 序列化的屬性”中列出的屬性,因?yàn)?XML Web services 可以使用文本樣式,也可以使用編碼的 SOAP 樣式。
C# XmlSerializer的相關(guān)內(nèi)容就向你介紹到這里,希望對(duì)你了解和學(xué)習(xí)C# XmlSerializer有所幫助。
【編輯推薦】