C 序列化和反序列化

2021-04-26 13:50:23 字數 3063 閱讀 4984

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 標註某變數不可被序列化。有時候在程式中徐希望將乙個變數序列化,卻希望在反序列化的時候可以得到這個物件進行的操作,而得到沒有被...