2012-05-29 59 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用于配置不使用属性的类型,非常适合您无法访问的类型。 –