作者:SPARON MSN:ZHAOKEYONG@HOTMAIL.COM
兒天沒寫東東了,這兒天研究了下.NET對象的XML序列化,雖不是很深入,但還是記下,就算是學(xué)習(xí)道路的一個(gè)里程碑吧。
在WEBFORM開發(fā)中有很大一個(gè)難題是數(shù)據(jù)庫的調(diào)用,雖然DATASET對數(shù)據(jù)的讀取有了很大進(jìn)步,但是每第一次訪問網(wǎng)站時(shí)總會(huì)讀很久的數(shù)據(jù),有沒有一種很的辦法來控制呢?答案是肯定的,在.NET下有一種技術(shù)叫做對象序列化,它可以將對象序列化為二進(jìn)制文件、XML文件、SOAP文件,這樣,使用經(jīng)過序列化的流進(jìn)行傳輸效率就得到了大大的提升。
在.NET中提供了兩種序列化:二進(jìn)制序列化、XML和SOAP序列化。對于WEB應(yīng)用來說,用得最多的是第二種———XML和SOAP序列化。
XML 序列化將對象的公共字段和屬性或者方法的參數(shù)和返回值轉(zhuǎn)換(序列化)為符合特定 XML 架構(gòu)定義語言 (XSD) 文檔的 XML 流。XML 序列化生成強(qiáng)類型的類,并為存儲(chǔ)或傳輸目的將其公共屬性和字段轉(zhuǎn)換為序列格式(在此情況下為 XML)。
注意
XML 序列化不轉(zhuǎn)換方法、索引器、私有字段或只讀屬性(只讀集合除外)。
理解了基本的理論后我們來看看XML是如何進(jìn)行對象序列化的。
看死板的文字是非??菰锏?,還是用CODE來說明問題直截了當(dāng)。
XML文件序列:
SerObj obj = new SerObj();
obj.name = "sparon";
obj.age = 23;
obj.sex = true;
XmlSerializer ser = new XmlSerializer(typeof (SerObj));
Stream file = new FileStream("sptxt.xml", FileMode.Create, FileAccess.Write);
ser.Serialize(file, obj);
SerObj對象如下:
public class SerObj
{
public string name;
public int age;
public bool sex;//true為男;false為女;
public SerObj() { }
}
其實(shí)關(guān)鍵步驟只有兩步:
XmlSerializer ser = new XmlSerializer(typeof (SerObj));
使用SerObj對象的類型來造一個(gè)XmlSerializer,然后使用Serialize方法將Stream對象和SerObj對象一起傳入,序列出一個(gè)XML文件。
XML文件如下所示:
<?xml version="1.0"?>
<SerObj xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<name>sparon</name>
<age>23</age>
<sex>true</sex>
</SerObj>
反序列化步驟如下:
SerObj obj = new SerObj();
XmlSerializer ser = new XmlSerializer(typeof (SerObj));
Stream file = new FileStream("sptxt.xml", FileMode.Open , FileAccess.Read );
obj=(SerObj )ser.Deserialize(file);
其差別就在后兩句而關(guān)鍵的就只有obj=(SerObj )ser.Deserialize(file);一句。這個(gè)是反序列化XML文件并轉(zhuǎn)換為SerObj類型賦予obj。
注意:使用Serialize和Deserialize需要指明命令空間System.Xml.Serialization
個(gè)人總結(jié)
序列(Serialize) :將對象序列為文件。
反序列化(Deserialize):將文件序列為對象。