C 中的 序列化 Serializable 理解

2022-07-19 07:12:19 字數 2850 閱讀 1166

為什麼您想要使用序列化?有兩個最重要的原因促使對序列化的使用:乙個原因是將物件的狀態保持在儲存**中,以便可以在以後重新建立精確的副本;另乙個原因是通過值將物件從乙個應用程式域傳送到另乙個應用程式域中。例如,序列化可用於在   asp.net   中儲存會話狀態並將物件複製到   windows   窗體的剪貼簿中。遠端處理還可以使用序列化通過值將物件從乙個應用程式域傳遞到另乙個應用程式域中。  

序列化的是物件的狀態  

也就是物件資料成員的值和方法是沒有關係的

跨應用程式域通訊時,要用到序列化  

以及用web服務時

一:binaryformatter序列化

序列化簡單點來理解就是把記憶體的東西寫到硬碟中

,當然也可以寫到記憶體中

(這個內容我會在後面寫乙個例子

).而反序列化就是從硬碟中把資訊讀到記憶體中

.就這麼簡單,呵呵

,現在來看下面的例子吧

!在這篇文章中我將使用

binaryformatter

序列化類

book

作為例子

,希望大家能從例子中深刻體會什麼是序列化

.定義類

book:

[serializable]

public class book

}在類的上面增加了屬性

:serializable.(

如果不加這個屬性

,將丟擲

serializationexception

異常).

通過這個屬性將

book

標誌為可以序列化的

.當然也有另一種方式使類

book

可以序列化

,那就是實行

iserializable

介面了.

在這裡大家要注意了

:serializable

屬性是不能被繼承的咯

!!!如果你不想序列化某個變數

,該怎麼處理呢

?很簡單

,在其前面加上屬性

[nonserialized] .

比如我不想序列化

string author;

那我只需要

[nonserialized]

string author;好了,

現在就告訴大家怎麼實現序列化

:我們使用

namespace:

using system;

using system.io;

using system.runtime.serialization.formatters.binary;

首先建立

book

例項,like this:  

book book = new book("day and night", 30.0f

, "bruce");

接著當然要建立乙個檔案了

,這個檔案就是用來存放我們要序列化的資訊了

.filestream fs = new filestream(@"c:\book.dat", filemode.create);

序列化的實現也很簡單

,like this:

binaryformatter formatter = new binaryformatter();

formatter.serialize(fs, book);

很簡單吧

!現在我列出整個原**

,包括反序列化

.static void main

(string args)

book = null;

using(filestream fs = new filestream(@"c:\book.dat", filemode.open))

}

序列化(serialization)是.net平台最酷的特性之一。

1、為什麼要序列化:

首先你應該明白系列化的目的就不難理解他了。系列化的目的就是能在網路上傳輸物件,否則就無法實現物件導向的分布式計算。比如你的客戶端要呼叫伺服器上的乙個方法獲得乙個產品物件,比如方法為:public product findproduct(int product_id);

注意該方法返回乙個product物件,如果沒有系列化技術,客戶端就收不到返回的物件product。而序列化的實現就是把物件變成乙個可在網路上傳輸的位元組流。

2、利用序列化技術,可以實現物件的備份和還原。序列化可以將記憶體中的物件(或物件圖)序列化為資料流,並儲存到磁碟上進行持久化;還可以將資料流反序列化為物件,實現物件的還原。序列化技術在分布式系統的資料傳輸中得到充分的利用,如:xml web service 利用xml序列化實現跨平台,.net remoting 則用到了二進位制序列化和soap序列化。

.net compact framework 2.0 支援xml序列化,不支援二進位制序列化和soap序列化。而 .net compact framework 1.0 連xml序列化都不支援。不過 opennetcf 1.x 為 .net cf 1.0 實現了乙個xml序列化的類,這個類在 opennetcf.xml.dll 程式集中可以找到。

序列化和反序列化用於將乙個物件儲存到檔案,和從檔案讀取。

using system.io;

using system.runtime.serialization.formatters.binary;

[serializable()]//可以序列化的類需要用這個屬性標記

public class tobeserialized

}

public class test

public void deserialize()//反序列化

}

C 中的序列化

序列化的作用 物件的序列化是將物件轉換為二進位制資料 位元組流 而反序列化是將二進位制資料還原為物件,物件是稍縱即逝,好比如程式重啟 退出函式範圍等等都會造成物件的消失,序列化和反序列化的作用都是為了保持物件的持久化!和序列化有關的類 1.binaryformatter類,他主要有兩個方法乙個是 v...

C 序列化 反序列化

序列化又稱序列化,是.net執行時環境用來支援使用者定義型別的流化的機制。其目的是以某種儲存形成使自定義物件持久化,或者將這種物件從乙個地方傳輸到另乙個地方。net框架提供了兩種序列化的方式 1 是使用binaryformatter進行序列化 2 使用soapformatter進行序列化 3 使用x...

C 中類的序列化和反序列化

說明 本文演示將類序列化後寫入記事本並從記事本讀取反序列化為物件 1.首先建立乙個類,同時類必須標識為serializable,如下 serializable public class region public string region id public string region name ...