我想序列化一個對象緩存到磁盤,以便它可以在下次加載程序時加載。 正在保存的類的功能之一是它包含對其他對象的引用。 例如: 我有一個圖像類的列表,存儲遠程URL,本地文件路徑,如果它被下載等....我然後綁定可見性下載和源到本地文件路徑。 其他對象具有對此圖像的引用,因此當圖像下載時,它會更新一次,並且所有綁定都將更新指向它的所有項目。如何序列化一個.NET類到磁盤
作爲一個快速解決方案,我實現了一個二進制格式化程序,所有工作都正常。我的所有列表都被序列化到磁盤上,當我重新加載它們時,所有引用都保留下來(IE 1圖像對象被創建,並且使用它的所有內容都有一個引用,而不是反序列化,每次它出現時創建一個Image的新實例)
My問題是我應該用什麼樣的Serialier存儲到磁盤,同時不會破壞我的引用?我讀過BinaryFormatter對於序列化到磁盤並希望它在不同版本中工作是一個糟糕的選擇。儘管到目前爲止我還沒有遇到任何問題,但我不想在一年中遇到問題,並迫使我的所有用戶重新獲得所有緩存的元數據。
我不是100%確定所有不同的序列化程序如何工作,但我認爲如果我要使用XML,可能需要編寫某種類型的轉換程序。如果有幫助,我的所有圖像對象都有一個GUID分配給它們,所以我對每個對象都有獨特的東西。
更新:我剛剛發現了以下問題看起來類似Maintain object references through Serialize/Deserialize 誰能告訴我,如果DataContractSerializer的是在不同版本的applciation Vs的BinaryFormatter的的缺點的長期系列化存儲一個好的選擇嗎?
看看[Redis持久性](http://redis.io/topics/persistence) – oleksii 2012-07-10 10:30:34
@oleksii你意識到這與對象序列化完全無關,對吧? – 2012-07-10 11:32:26
@MarcGravell沒有抱歉,我沒有意識到這一點。我發表了評論,因爲(我相信你比我更瞭解)redis是一個分佈式緩存提供者,它具有將數據保存到驅動器的內置功能。如果這個功能已經在行業解決方案中實現,爲什麼要重新發明輪子?我沒有把它作爲一個答案,因爲我意識到它可能不是簡單的(或期望的)在redis上帶來新的依賴。如果我錯了,請糾正我。 – oleksii 2012-07-10 11:57:41