binaryserialize serialize = new binaryserialize();
book book = serialize.deserialize();
book.write();3、測試用的
binaryserialize類
using system;
using system.collections.generic;
using system.text;
using system.io;
using system.runtime.serialization.formatters.binary;
namespace serializabletest }
public book deserialize()
return book;
} }
} 主要就是呼叫system.runtime.serialization.formatters.binary空間下的binaryformatter類進行序列化和反序列化,以縮略型二進位制格式寫到乙個檔案中去,速度比較快,而且寫入後的檔案已二進位制儲存有一定的保密效果。
呼叫反序列化後的截圖如下:
也就是說除了標記為nonserialized的其他所有成員都能序列化
二、soapformatter序列化方式
呼叫序列化和反序列化的方法和上面比較類似,我就不列出來了,主要就看看soapserialize類
soapserialize類
using system;
using system.collections.generic;
using system.text;
using system.io;
using system.runtime.serialization.formatters.soap;
namespace serializabletest }
public book deserialize()
return book;
} }
} 主要就是呼叫system.runtime.serialization.formatters.soap空間下的soapformatter類進行序列化和反序列化,使用之前需要應用system.runtime.serialization.formatters.soap.dll(.net自帶的)
序列化之後的檔案是soap格式的檔案(簡單物件訪問協議(****** object access protocol,soap),是一種輕量的、簡單的、基於xml的協議,它被設計成在web上交換結構化的和固化的資訊。 soap 可以和現存的許多網際網路協議和格式結合使用,包括超文字傳輸協議(http),簡單郵件傳輸協議(smtp),多用途網際郵件擴充協議(mime)。它還支援從訊息系統到遠端過程呼叫(rpc)等大量的應用程式。soap使用基於xml的資料結構和超文字傳輸協議(http)的組合定義了乙個標準的方法來使用internet上各種不同操作環境中的分布式物件。) [page]
呼叫反序列化之後的結果和方法一相同
三、xml序列化方式
呼叫序列化和反序列化的方法和上面比較類似,我就不列出來了,主要就看看xmlserialize類
xmlserialize類
using system;
using system.collections.generic;
using system.text;
using system.io;
using system.xml.serialization;
namespace serializabletest }
public book deserialize()
return book;
} }
} 從這三個測試類我們可以看出來其實三種方法的呼叫方式都差不多,只是具體使用的類不同
xml序列化之後的檔案就是一般的乙個xml檔案:
book.xml
<?xml version=/"1.0/"?>
c#強化
*****
gspring永春1
輸出截圖如下:
也就是說採用xml序列化的方式只能儲存public的字段和可讀寫的屬性,對於private等型別的字段不能進行序列化
關於迴圈引用:
比如在上面的例子book類中加入如下乙個屬性:
public book relationbook;
在呼叫序列化時使用如下方法:
book book = new book();
book.bookid = /"1/"; [page]
book.albookreader.add(/"gspring/");
book.albookreader.add(/"永春/");
book.strbookname = /"c#強化/";
book.strbookpwd = /"*****/";
book.setbookprice(/"50.00/");
book book2 = new book();
book2.bookid = /"2/";
book2.albookreader.add(/"gspring/");
book2.albookreader.add(/"永春/");
book2.strbookname = /".net強化/";
book2.strbookpwd = /"*****/";
book2.setbookprice(/"40.00/");
book.relationbook = book2;
book2.relationbook = book;
binaryserialize serialize = new binaryserialize();
serialize.serialize(book);這樣就會出現迴圈引用的情況,對於binaryserialize和soapserialize可以正常序列化(.net內部進行處理了),對於xmlserialize出現這種情況會報錯:/"序列化型別 serializabletest.book 的物件時檢測到迴圈引用。/"
序列化和反序列化 C 序列化與反序列化。
序列化介紹 把物件用一種新的格式來表示。系列化只序列化資料。序列化不建議使用自動屬性 為什麼要序列化 將乙個複雜的物件轉換流,方便儲存與資訊交換。class program class person public int age 二進位制序列化 就是將物件變成流的過程,把物件變成byte class...
C 序列化和反序列化
對stu類進行序列化和反序列化操作序列化所用到的stu類using system using system.collections.generic using system.linq using system.text public string stuname public int stuage ...
C 序列化和反序列化
c 序列化和反序列化 系列化是將物件寫入流的過程,而反序列化是從流中讀取物件的過程。在類上使用 serializable 屬性標註為可序列化,用 noserializable 標註某變數不可被序列化。有時候在程式中徐希望將乙個變數序列化,卻希望在反序列化的時候可以得到這個物件進行的操作,而得到沒有被...