c#中的"序列化" serializable 理解
我的理解: 比如用乙個類描述一張合同,而這個類例項化後其中的字段儲存著合同的資訊,如果現在要把這個類的例項傳送到另一台機器、另乙個窗體或是想儲存這個類以便以 後再取出來用(持久化物件),可以對這個類進行序列化(序列化實際上是乙個資訊流),傳送或儲存,用的時候再反序列化重新生成這個物件
為什麼您想要使用序列化?有兩個最重要的原因促使對序列化的使用:乙個原因是將物件的狀態保持在儲存**中,以便可以在以後重新建立精確的副本;另 乙個原因是通過值將物件從乙個應用程式域傳送到另乙個應用程式域中。例如,序列化可用於在 asp.net 中儲存會話狀態並將物件複製到 windows 窗體的剪貼簿中。遠端處理還可以使用序列化通過值將物件從乙個應用程式域傳遞到另乙個應用程式域中。 序列化的是物件的狀態 也就是物件資料成員的值和方法是沒有關係的
跨應用程式域通訊時,要用到序列化 以及用web服務時 一:binaryformatter序列化
序列化簡單點來理解就是把記憶體的東西寫到硬碟中,當然也可以寫到記憶體中(這個內容我會在後面寫乙個例子).而反序列化就是從硬碟中把資訊讀到記憶體中.就這麼簡單,呵呵,現在來看下面的例子吧!
定義類book:
[ref="tag-863-1.html">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", numbertype="1" tcsc="0">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)) }
有不對的地方,請大家多多糾正.....
注意一定不要忘了: using system.runtime.serialization.formatters.binary; 命名空間。
序列化與反序列化
把複雜的資料型別壓縮到乙個字串中 serialize 把變數和它們的值編碼成文字形式 unserialize 恢復原先變數 eg stooges array moe larry curly new serialize stooges print r new echo print r unserial...
序列化與反序列化
序列化是將物件處理為位元組流以儲存物件或傳輸到記憶體 資料庫或檔案。其主要目的是儲存物件的狀態,以便可以在需要時重新建立物件。相反的過程稱為反序列化。通過序列化,開發人員可以儲存物件的狀態,並在需要時重新建立該物件,從而提供物件的儲存以及資料交換。通過序列化,開發人員還可以執行類似如下的操作 通過 ...
序列化與反序列化
1 把 物件 轉換為 位元組序列 的過程稱為物件的序列化。把 位元組序列 恢復為 物件 的過程稱為物件的反序列化。序列化using system using system.collections.generic using system.linq using system.text using sy...