要實現上述類的實例的序列化,可參照如下例子:
meablock myblock = new meablock();
// insert code to set properties and fields of the object.
xmlserializer myserializer = new xmlserializer(typeof(meablock));
// to write to a file, create a streamwriter object.
streamwriter mywriter = new streamwriter("myfilename.xml");
myserializer.serialize(mywriter, meablock);
需要注意的是xml序列化只會將public的字段保存,對于私有字段不予于保存。
生成的xml文件格式如下:
<meablock>
<caption>test</caption>
</meablock>
對于對象的反序列化,則如下:
meablock myblock;
// constructs an instance of the xmlserializer with the type
// of object that is being deserialized.
xmlserializer myserializer = new xmlserializer(typeof(meablock));
// to read the file, creates a filestream.
filestream myfilestream = new filestream("myfilename.xml", filemode.open);
// calls the deserialize method and casts to the object type.
myblock = (meablock)myserializer.deserialize(myfilestream)
2、二進制序列化
與xml序列化不同的是,二進制序列化可以將類的實例中所有字段(包括私有和公有)都進行序列化操作。這就更方便、更準確的還原了對象的副本。
要實現上述類的實例的序列化,可參照如下例子:
meablock myblock = new meablock();
// insert code to set properties and fields of the object.
iformatter formatter = new binaryformatter();
stream stream = new filestream("myfile.bin",filemode.create,fileaccess.write, fileshare.none);
formatter.serialize(stream, myblock);
stream.close();
對于對象的反序列化,則如下:
iformatter formatter = new binaryformatter();
stream stream = new filestream("myfile.bin", filemode.open,fileaccess.read, fileshare.read);
meablock myblock = (meablock) formatter.deserialize(stream);
stream.close();
三、如何變相實現自定義可視化控件的序列化、反序列化
對于winform中自定義控件,由于繼承于system.windows.form類,而form類又是從marshalbyrefobject繼承的,窗體本身無法做到序列化,窗體的實現基于win32下gui資源,不能脫離當前上下文存在。
當然可以采用變通的方法實現控件的序列化。這里采用的是記憶類模型。
定義記憶類(其實就是一個可序列化的實體類)用于記錄控件的有效屬性,需要序列化控件的時候,只需要將該控件的實例copy到記憶類,演變成序列化保存該記憶類的操作。
反序列化是一個逆過程。將數據流反序列化成為該記憶類,再根據該記憶類的屬性生成控件實例。而對于控件的一些事件、方法則可以繼續使用。
新聞熱點
疑難解答
圖片精選