資訊儲存在記憶體中是非常好的,但有時你的使用者不得不關閉你的應用程式。如果你想知道儲存在記憶體中是什麼資料,也就意味著(可能)你有時需要把資訊寫入檔案。今天,我們來看乙個
.net
內建特徵叫做序列化
– 從檔案讀寫資料非常的容易。
在這個例子中,我想建立乙個程式跟蹤所有有汽車的朋友。為了實現這個功能我建立了兩個物件:
car和
owner
。car
物件儲存車牌、型號和汽車使用年限。
owner
物件儲存汽車擁有者的一些資訊。每個
car物件包含乙個
owner
物件的引用。
//關於car
的資訊
public
class
car }//
關於汽車擁有者的資訊
public
class
owner
} 因為我們可能不止乙個朋友,我們需要建立乙個
car的列表物件。
list
cars = new
list
();
現在我們已經建立了我們需要的物件了,接下去我們準備序列化他們。當我儲存資料到檔案,我想建立乙個特殊物件用於儲存我想序列化的所有東西。
public
class
objecttoserialize
set
}public objecttoserialize()
} 這個類包含我想系列化的每個物件的引用。在這個例子中,我僅想儲存汽車列表。現在讓我們建立乙個函式用於序列化和反序列化我們的物件。我通常建立乙個
serializer
類用於控制檔案的讀寫。
using
system.io;
using
system.runtime.serialization;
using
system.runtime.serialization.formatters.binary;
public
class
serializer
public
void serializeobject(string filename,
objecttoserialize objecttoserialize)
public objecttoserialize deserializeobject(string filename)
} 正如你所看到的,序列化乙個物件所需要的**實際上是非常小和簡單的。在這一點上,**沒有修改。在
serialize
函式前可以呼叫
objecttoserialize
,我們必須包括
serializable
特性並且我們必須實現
iserializable
介面。
using
system.runtime.serialization;
using
system.runtime.serialization.formatters.binary;
[serializable()]
public
class
objecttoserialize : iserializable
set
}public objecttoserialize()
public objecttoserialize(serializationinfo info, streamingcontext ctxt)
public
void getobjectdata(serializationinfo info, streamingcontext ctxt)
} 作為iserializable
介面,這個類必須包含其他構造方法初始物件,並有乙個
getobjectdata
函式用於描述如何序列化物件。因此
car和
owner
物件也被序列化,他們也需要實現這些方法。
[serializable()]
public
class
car : iserializable
public car(serializationinfo info, streamingcontext ctxt)
public
void getobjectdata(serializationinfo info, streamingcontext ctxt)
}[serializable()]
public
class
owner : iserializable
public owner(serializationinfo info, streamingcontext ctxt)
public
void getobjectdata(serializationinfo info, streamingcontext ctxt)
} 現在,儲存物件列表到檔案,所需要做的是呼叫
serializer
類的serialize
和deserialize
方法。
list
cars = new
list
();//
儲存汽車列表到檔案
objecttoserialize
objecttoserialize = new
objecttoserialize ();
objecttoserialize.cars = cars;
serializer
serializer = new
serializer ();
serializer.serializeobject("outputfile.txt" , objecttoserialize);
//汽車列表以及被儲存到
outputfile.txt中
//從outputfile.txt
檔案中讀取資訊
objecttoserialize = serializer.deserializeobject("outputfile.txt" );
cars = objecttoserialize.cars;
所有的這些都需要從二進位制檔案中儲存和載入
c#自定義物件。像所有檔案一樣,你的這些檔案也可能被破壞。因此,最好的想法是當從檔案讀取乙個破壞的物件時執行錯誤處理。
C 序列化物件到檔案和從檔案發序列化物件
序列化物件和發序列化物件 程式應用過程中,經常會把物件序列化到到檔案中,以儲存資料。然後再從檔案中反序列化出來。具體應用如下 1,構造乙個類 注意一定要加上 serializable 表示可序列。serializable class parameter public string name publ...
把物件序列化到檔案中和從檔案中反序列化的管理類
用於通用的載入或儲存 xml 序列化配置檔案的類,該類通常適用於使用結構來儲存配置資料的程式,例如資料來源配置。型別必須為可序列化的類,並且要實現 collectbase 類,以及乙個通用的索引器。把乙個 datatable 物件序列化到檔案中。datatable table xmlconfigpr...
物件序列化 反序列化
必須新增引用 using system.io using system.runtime.serialization using system.runtime.serialization.formatters.binary 方法 region 物件序列化 物件序列化 任意物件 字串 public st...