C C 知識回顧 序列化

2021-09-08 19:27:54 字數 3332 閱讀 1643

序列化 (serialization)將物件的狀態資訊處理為位元組流,以便於儲存或傳輸到記憶體、資料庫或檔案的乙個過程。在序列化期間,物件將其當前狀態寫入到臨時或永續性儲存區,主要目的是儲存物件的狀態。便於日後從該狀態中進行還原,建立新的物件,這個過程又稱為反序列化。

物件被序列化為位元組流(包括資料、物件的型別資訊:如版本、區域性和程式集名稱) --> 儲存到 db、io 等地方。

我們在資料交換的時候常進行序列化儲存物件的資料資訊,在需要使用它的時候再進行反序列化重新讀取物件的資訊並進行校驗和儲存的一些工作。常用於 web 間傳遞資料,跨域傳遞,asp .net 後台**往前端傳遞資料(js 進行解析處理)。

進行序列化的操作,需要:乙個帶序列化的物件,乙個是包含序列化物件的流和乙個序列化器(

formatter)。

我們進行編寫的類中,缺省會給類加上 

serializableattribute 特性的,當然你也可以使用顯式的方式進行新增。當你打算對乙個物件進行序列化時,如果它不包含 

serializableattribute,將會引發異常。在某些時候,我們可能不希望類中的某些欄位或屬性進行序列化操作,你可以在該字段或屬性上使用 

nonserializedattribute ,以告訴序列化器不對它們進行序列化操作。

【備註】如果已序列化的類中包含了其他類物件的引用,而這些類又恰巧也有

serializableattribute,那麼它們也會被進行序列化。

【備註】序列化的關鍵字特性:

serializableattribute、

nonserializedattribute。

這裡介紹一種常見的序列化和一種不常見的序列化:

(1)二進位制序列化:使用二進位制編碼來生成精簡的序列化,會序列化所有成員,並提高效能。常用於儲存和 socket 傳輸。

(2)xml 序列化:可讀性更高,也就表示有更高的靈活性,操作的便利性。可用 xmlserializer 進行序列化操作。

這裡使用 demo 進行簡單演示如何對物件進行序列化和反序列化操作。

1     [serializable]  //

將類標記為可序列化

2public

class

coupon : inotifypropertychanged35

6public

float interestrate 78

public

int term 910

private

string

_name;

1112

public

string

name

1315

set1620}

2122 [field: nonserialized()] //

將可序列化的類中的某欄位標記為不被序列化

圖2-1 

現在嘗試反序列化,看看與之前 coupon 物件的值是否一致。

圖2-2

圖2-3

反序列化時也採用 soapformatter 即可,結果同圖2-2。

var deserializer = new soapformatter();   //

soap 格式化器

var coupon = deserializer.deserialize(stream) as coupon; //

反序列化

【注意】不應將這些格式用於敏感資料,如密碼或信用卡資訊。

【備註】二進位制格式對於大多數 windows 應用程式均適用。對於以前來說,使用 web 應用程式或者是 web 服務,建議使用 soap 的 xml 進行傳輸。而現在,當然是使用大眾化的 json 格式進行傳輸啦。

同樣,也可以通過 xmlserializer 將物件序列化儲存在 xml 檔案。我們可以根據需求選擇合適的序列化器,操作基本是一樣的。

@hi丶小時候 使用 serializableattribute 特性時,是不建議使用自動屬性的,序列化後的字段都是多出 k_backingfield<> 17個字元,如果物件很大會浪費一部分流量,建議使用 datacontractattribute 和 datamemberattribute

@梁逸晨 除非對方系統強制要求 soap 才能通訊,否則該人人抵制這麼***的東西,建議樓主 json 或 protobuf

【參考】

【參考】微軟官方文件

C 基礎知識回顧 序列化與反序列化

序列化是指儲存和獲取磁碟檔案 記憶體或其他地方中的物件。在序列化時,所有的例項資料都儲存到儲存介質上,在取消序列化時,物件會被還原,且不能與其原例項區別開來。只需給類新增serializable屬性,就可以實現序列化實 的成員。反序列化 是序列化的逆過程,資料從儲存介質中讀取出來,並賦給類的例項變數...

C 基礎知識回顧 序列化與反序列化

序列化是指儲存和獲取磁碟檔案 記憶體或其他地方中的物件。在序列化時,所有的例項資料都儲存到儲存介質上,在取消序列化時,物件會被還原,且不能與其原例項區別開來。只需給類新增serializable屬性,就可以實現序列化實 的成員。反序列化 是序列化的逆過程,資料從儲存介質中讀取出來,並賦給類的例項變數...

序列化的知識

序列化是將物件狀態轉換成可保持或傳輸的格式。反序列化是將流轉換為物件。序列化和反序列化的作用是 使資料能夠被輕鬆的儲存和傳輸。實質上序列化機制是將類的值轉化為乙個一般的 即連續的 位元組流,然後就可以將該流寫到磁碟檔案或任何其他流化目標上。而要想實際的寫出這個流,就要使用那些實現了iformatte...