淺析XML序列化的優(yōu)缺點(diǎn)
我們在.NET的學(xué)習(xí)過程中,是否發(fā)現(xiàn)了使用XML序列化的好處呢?XML序列化的好處是什么呢?還有就是有好處就會有一定的風(fēng)險(xiǎn),那么我們在使用XML序列化的時候有需要注意什么呢?下面我們來詳細(xì)看看具體的內(nèi)容。
在XML序列化中我們會用到 XmlSerializer類,它在您將對象序列化為 XML 時為您提供完整而靈活的控制。如果您正在創(chuàng)建 XML Web services,則可以將控制序列化的屬性應(yīng)用于類和成員以確保 XML 輸出符合特定的架構(gòu)。
1、XML序列化之XmlSerializer使用所帶來的好處:
◆指定應(yīng)將字段或?qū)傩跃幋a為特性還是元素。
◆指定要使用的 XML 命名空間。
◆如果字段或?qū)傩悦缓线m,則指定元素或特性的名稱。
◆XML序列化的另一個好處是:只要生成的XML流符合給定的架構(gòu),則對于所開發(fā)的應(yīng)用程序就沒有約束。假定有這樣一個用于描述圖書的架構(gòu),它具有標(biāo)題、作者、出版商和 ISBN 編號元素。您可以開發(fā)一個以您希望的任何方式(例如,作為圖書訂單,或作為圖書清單)處理 XML 數(shù)據(jù)的應(yīng)用程序。在任一種情況下,***的要求是 XML 流應(yīng)當(dāng)符合指定的 XML 架構(gòu)定義語言 (XSD) 架構(gòu)。
2、XML 序列化注意事項(xiàng):使用 XmlSerializer 類時,應(yīng)考慮下列情況
◆序列化數(shù)據(jù)只包含數(shù)據(jù)本身以及類的結(jié)構(gòu)。不包括類型標(biāo)識和程序集信息。
◆只能序列化公共屬性和字段。如果需要序列化非公共數(shù)據(jù),請使用 BinaryFormatter 類而不是 XML 序列化。
◆類必須有一個將由 XmlSerializer 序列化的默認(rèn)構(gòu)造函數(shù)。
◆不能序列化方法。
XmlSerializer 可以以不同方式處理實(shí)現(xiàn) IEnumerable 或 ICollection 的類(條件是這些類滿足某些要求)。實(shí)現(xiàn) IEnumerable 的類必須實(shí)現(xiàn)帶單個參數(shù)的公共 Add 方法。Add 方法的參數(shù)必須與從 GetEnumerator 方法返回的 IEnumerator.Current 屬性所返回的類型一致(多態(tài))。除實(shí)現(xiàn) IEnumerable 外還實(shí)現(xiàn) ICollection 的類(如 CollectionBase)必須有一個取整數(shù)的公共 Item 索引屬性(在 C# 中為索引器),并且它必須有一個整數(shù)類型的公共 Count 屬性。傳遞給 Add 方法的參數(shù)必須與從 Item 屬性返回的類型相同或與該類型的某個基的類型相同。對于實(shí)現(xiàn) ICollection 的類,要序列化的值將從索引 Item 屬性檢索,而不是通過調(diào)用 GetEnumerator 來檢索。另外請注意,除返回另一個集合類(實(shí)現(xiàn) ICollection 的集合類)的公共字段之外,將不序列化公共字段和屬性。有關(guān)示例,請參見 XML 序列化的示例。
XSD 數(shù)據(jù)類型映射
標(biāo)題為“XML Schema Part 2: Datatypes”的萬維網(wǎng)聯(lián)合會 (http://www.w3.org/) 文檔指定在 XML 架構(gòu)定義語言 (XSD) 架構(gòu)中允許使用的簡單數(shù)據(jù)類型。對于這些數(shù)據(jù)類型中的許多類型(例如,int 和 decimal),在 .NET Framework 中都有對應(yīng)的數(shù)據(jù)類型。但是,某些 XML 數(shù)據(jù)類型在 .NET Framework 中沒有對應(yīng)的數(shù)據(jù)類型(例如,NMTOKEN 數(shù)據(jù)類型)。在這樣的情況下,如果使用 XML 架構(gòu)定義工具 (Xsd.exe) 從架構(gòu)生成類,就會將適當(dāng)?shù)奶匦詰?yīng)用于字符串類型的成員,并會將其 DataType 屬性設(shè)置為 XML 數(shù)據(jù)類型名稱。例如,如果架構(gòu)包含一個數(shù)據(jù)類型為 XML 數(shù)據(jù)類型 NMTOKEN 的、名為“MyToken”的元素,則生成的類可能包含以下示例中的成員。
[Visual Basic]<XmlElement(DataType:="NMTOKEN")>Public MyToken As String[C#][XmlElement(DataType = "NMTOKEN")]public string MyToken;與此類似,如果創(chuàng)建一個必須符合特定 XML 架構(gòu) (XSD) 的類,應(yīng)當(dāng)應(yīng)用適當(dāng)?shù)奶匦圆⑺?DataType 屬性設(shè)置為所需的 XML 數(shù)據(jù)類型名稱。
關(guān)于XML序列化的使用優(yōu)點(diǎn)以及XML序列化的使用注意事項(xiàng)就向你介紹到這里,希望對你了解和學(xué)習(xí)XML序列化有所幫助。
【編輯推薦】