我正在通過編寫一個家庭庫管理器來學習C#。用C保存數據結構#
我有一個BookController將書籍存儲在數據結構中並對它們執行操作。
C#是否有一種方法可以將字典中的數據保存到本地文件中,或許以XML方式加載以後,或者我將不得不自己編寫它?
將這些數據保存並加載到C#中的最佳方法是什麼?只需要指出一個好方向。
我正在通過編寫一個家庭庫管理器來學習C#。用C保存數據結構#
我有一個BookController將書籍存儲在數據結構中並對它們執行操作。
C#是否有一種方法可以將字典中的數據保存到本地文件中,或許以XML方式加載以後,或者我將不得不自己編寫它?
將這些數據保存並加載到C#中的最佳方法是什麼?只需要指出一個好方向。
實際上序列化過程中,C#(語言)不知道什麼約系列化,但.NET(框架)提供了很多的方法... XmlSerializer
,BinaryFormatter
,DataContractSerializer
(.NET 3.0) - 或者也有一些定製的序列化框架。
要使用哪一個取決於您的要求; BinaryFormatter
使用簡單,但會將彙編元數據信息刻錄到文件中 - 使其不可移植(例如,無法在Java中打開它)。 XmlSerializer
和DataContractSerializer
主要是基於xml的,因此非常便於攜帶,但是除非您壓縮,否則它相當大。
一些專有串行器是兩者之間的一半; protobuf-net是一個二進制格式化程序(非常密集的數據),但它遵循數據格式的可移植標準(Google協議緩衝區規範)。這是否有用取決於你的情況。
典型的代碼(這裏使用XmlSerializer
):
XmlSerializer ser = new XmlSerializer(typeof(Foo));
// write
using (var stream = File.Create("foo.xml"))
{
ser.Serialize(stream, foo); // your instance
}
// read
using (var stream = File.OpenRead("foo.xml"))
{
Foo newFoo = (Foo)ser.Deserialize(stream);
}
看Serialization和ISerializable interface
它可以讓您保存在一個便攜式的對象的狀態。
您還應該考慮尋找LINQ到SQL(或實體框架)的O/R映射和將數據存儲到數據庫(SQL CE,SQL表現)。
我創建了一個擴展方法,它接受一個對象併爲您創建一個xml字符串,您只需要從文件中保存/加載。 XmlSerialisation
XmlSerializer無法序列化Dictionary。 –
2008-12-16 07:46:27