2008-12-16 62 views
11

我正在通過編寫一個家庭庫管理器來學習C#。用C保存數據結構#

我有一個BookController將書籍存儲在數據結構中並對它們執行操作。

C#是否有一種方法可以將字典中的數據保存到本地文件中,或許以XML方式加載以後,或者我將不得不自己編寫它?

將這些數據保存並加載到C#中的最佳方法是什麼?只需要指出一個好方向。

回答

23

實際上序列化過程中,C#(語言)不知道什麼系列化,但.NET(框架)提供了很多的方法... XmlSerializer,BinaryFormatter,DataContractSerializer(.NET 3.0) - 或者也有一些定製的序列化框架。

要使用哪一個取決於您的要求; BinaryFormatter使用簡單,但會將彙編元數據信息刻錄到文件中 - 使其不可移植(例如,無法在Java中打開它)。 XmlSerializerDataContractSerializer主要是基於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); 
     } 
1

如果您希望您的數據採用XML格式,則有XmlSerializer

編輯:出於某種原因,我被低估了提示,因爲XmlSerializer無法序列化字典。

要解決這個問題,你總是可以像定製this

+0

XmlSerializer無法序列化Dictionary 。 – 2008-12-16 07:46:27

1

您還應該考慮尋找LINQ到SQL(或實體框架)的O/R映射和將數據存儲到數據庫(SQL CE,SQL表現)。

1

我創建了一個擴展方法,它接受一個對象併爲您創建一個xml字符串,您只需要從文件中保存/加載。 XmlSerialisation