C 中的 序列化 Serializable 理解

2021-04-12 20:37:35 字數 2136 閱讀 9317

我的理解:  

比如用乙個類描述一張合同,而這個類例項化後其中的字段儲存著合同的資訊,如果現在要把這個類的例項傳送到另一台機器、另乙個窗體或是想儲存這個類以便以後再取出來用(持久化物件),可以對這個類進行序列化(序列化實際上是乙個資訊流),傳送或儲存,用的時候再反序列化重新生成這個物件 

為什麼您想要使用序列化?有兩個最重要的原因促使對序列化的使用:乙個原因是將物件的狀態保持在儲存**中,以便可以在以後重新建立精確的副本;另乙個原因是通過值將物件從乙個應用程式域傳送到另乙個應用程式域中。例如,序列化可用於在   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))}

有不對的地方

,請大家多多糾正.....

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 ...