我想在c#中保存/讀取對象到磁盤。它的一些屬性沒有用[Serializable]標記。 還有其他方法可以保存嗎? 我不關心磁盤上對象的格式,我只想將它轉儲到磁盤並讀取它。保存c#對象到磁盤
有什麼建議嗎?
我想在c#中保存/讀取對象到磁盤。它的一些屬性沒有用[Serializable]標記。 還有其他方法可以保存嗎? 我不關心磁盤上對象的格式,我只想將它轉儲到磁盤並讀取它。保存c#對象到磁盤
有什麼建議嗎?
XmlSerializer
類不需要將對象標記爲可序列化,但它只保存公共字段和屬性。如果您需要序列化私有成員,除非您編寫自己的序列化程序,否則您運氣不佳。
BinaryFormatter會拋出異常,直到每個序列化成員目標是由[Serializable] –
標記。謝謝你的提醒。 –
無論如何,XmlSerializer不需要[Serializable]並且可以用於序列化。 –
建議的XmlSerializer的替代方案是protobuf-net。這是由SO/StackExchange擁有的Marc Gravell編寫的谷歌protobuf的.net實現。 注意,你必須有,因爲這protobuf網僅支持自定義類訪問對象:
如果這不適用於您,您可以編寫自己的解決方案,或者根據您的範圍使用像eloquera這樣的對象數據庫。
Eloquera +1。它可以在嵌入模式下工作,並且序列化任何複雜度的對象而不需要[Serializable]屬性。 – pennanth
作爲init更正:你**不需**無參數構造函數 - 支持ctor跳過。並且:您不需要像DataContractAttribute這樣的屬性 - 有一個獨立的API用於配置不使用屬性的類型,非常適合您無法訪問的類型。 –
如果它是一個非常簡單的對象,你可以將它保存爲帶有屬性名稱和值的XML。 – ThePower
我已經刪除了我的anwer,因爲它已經停止投票,即使它是正確的。請看看http://stackoverflow.com/questions/1596317/why-does-binary-serialization-require-the-object-to-be-marked-as-serializable –