物件序列化(三) 控制序列化過程

2021-09-09 02:57:59 字數 1346 閱讀 9152

接著上一節的內容,有時候我們在物件中,並不是所有的字段需要序列化。

示例:

以下是這個窗體需要用到的實體類

using system;

using system.collections.generic;

using system.text;

using system.runtime.serialization;

using system.collections;

namespace mutliobjectserialization2

}[serializable]

class studentlist//

學生清單

}

我們仔細想想,會發現「年齡」欄位很特殊,它直接依賴於「生日」欄位的值,而且會隨著時間的推移而發生變化。如果在序列化時,將此字段也序列化到檔案中,那麼無論什麼時候重建物件,「年齡」欄位的值都是不變的。這顯然不符合實際情況。

其實,只要知道了生日,拿當時日期一減,就可知道這個人的年齡,因此可以選擇不序列化「年齡」字段,而在反序列化物件時「現場」計算年齡再填入。這就需要對.net framework預設的物件序列化過程進行一定的調整。

在.net framework中,給類的乙個字段加上 [nonserialized] 標記,即可讓此字段不參與序列化。

.net framework還提供了乙個 ideserializationcallback 介面,它定義了乙個 ondeserialization 方法,可在反序列化完成時自動呼叫這一方法。換名話說:如果讓 collegestudent類實現ideserializationcallback介面(即提供乙個ondeserialization方法),則從流中重建collegestudent物件完成時,clr會自動呼叫已定義好的ondeserialization方法,可以在這個方法中寫**對年齡進行計算並填充「年齡」字段。

本日記介紹了用[nonserialized]標記和 ideserializationcallback 介面來控制序列化過程。除此之外,framework還提供了以下4個**標記用於提供更多的控制手段。

[onserializedattribute] : 在序列化完成後呼叫。

[onserializingattribute] : 在序列化進行時呼叫。

[ondeserializedattribute] :在反序列化完成後呼叫。

[ondeserializingattribute] : 在反序列化進行時呼叫。

將這些標記附加到方法上(乙個方法只能附加乙個標記),則在合適的時機這些方法會被自動呼叫。

物件序列化 反序列化

必須新增引用 using system.io using system.runtime.serialization using system.runtime.serialization.formatters.binary 方法 region 物件序列化 物件序列化 任意物件 字串 public st...

物件 序列化 反序列化

public class eventmessage 資訊提示類 型別1 操作日誌2 安全日誌 標題 內容 icon型別 url 執行script指令碼字串 需加 public static void messagebox int m type,string m title,string m body...

序列化(序列化)

原書上翻譯為序列化,msdn翻譯為序列化 作用 當需要儲存,或者網路傳輸 remoting時,資料 物件或值 需要序列化 類似於打包傳輸檔案。system.serializableattribute 序列化是指儲存和獲取磁碟檔案 記憶體或其他地方中的物件。在序列化時,所有的例項資料都儲存到儲存介質上...