2012-05-29 90 views
3

我想在c#中保存/讀取對象到磁盤。它的一些屬性沒有用[Serializable]標記。 還有其他方法可以保存嗎? 我不關心磁盤上對象的格式,我只想將它轉儲到磁盤並讀取它。保存c#對象到磁盤

有什麼建議嗎?

+0

如果它是一個非常簡單的對象,你可以將它保存爲帶有屬性名稱和值的XML。 – ThePower

+0

我已經刪除了我的anwer,因爲它已經停止投票,即使它是正確的。請看看http://stackoverflow.com/questions/1596317/why-does-binary-serialization-require-the-object-to-be-marked-as-serializable –

回答

1

XmlSerializer類不需要將對象標記爲可序列化,但它只保存公共字段和屬性。如果您需要序列化私有成員,除非您編寫自己的序列化程序,否則您運氣不佳。

+1

BinaryFormatter會拋出異常,直到每個序列化成員目標是由[Serializable] –

+0

標記。謝謝你的提醒。 –

+0

無論如何,XmlSerializer不需要[Serializable]並且可以用於序列化。 –

3

建議的XmlSerializer的替代方案是protobuf-net。這是由SO/StackExchange擁有的Marc Gravell編寫的谷歌protobuf的.net實現。 注意,你必須有,因爲這protobuf網僅支持自定義類訪問對象:

  • 被標記爲數據合同
  • 有一個無參數的構造函數
  • 爲Silverlight:是公共

如果這不適用於您,您可以編寫自己的解決方案,或者根據您的範圍使用像eloquera這樣的對象數據庫。

+0

Eloquera +1。它可以在嵌入模式下工作,並且序列化任何複雜度的對象而不需要[Serializable]屬性。 – pennanth

+1

作爲init更正:你**不需**無參數構造函數 - 支持ctor跳過。並且:您不需要像DataContractAttribute這樣的屬性 - 有一個獨立的API用於配置不使用屬性的類型,非常適合您無法訪問的類型。 –