将C#对象保存到磁盘

3
我想在c#中将一个对象保存/读取到磁盘上,但其中一些属性没有标记为[Serializable]。有没有其他方法可以保存它?我不关心对象在磁盘上的格式,只想将其转储到磁盘并读取它。您有什么建议吗?

如果这是一个相当简单的对象,你可以将其保存为具有属性名称和值的 XML。 - Lloyd Powell
我已经删除了我的答案,即使它是正确的,因为它被投票否决了。请查看http://stackoverflow.com/questions/1596317/why-does-binary-serialization-require-the-object-to-be-marked-as-serializable。 - Massimiliano Peluso
2个回答

3
一种替代建议的XmlSerializer的工具是protobuf-net。它是由SO/StackExchange的Marc Gravell编写的Google protobuf的.net实现。 请注意,您需要访问这些对象,因为protobuf-net仅支持以下自定义类:
  • 被标记为数据合同
  • 具有无参数构造函数
  • 对于Silverlight:必须是公开的
如果这不适用于您,您可以编写自己的解决方案,或者根据您的范围使用像eloquera这样的对象数据库。

对于Eloquera我给出一分。它可以在嵌入式模式下工作,并且可以序列化任何复杂度的对象,无需[Serializable]属性。 - Jay Haybatov
1
关于初始化更正:您不需要一个无参数的构造函数 - 支持跳过构造函数。并且:您不需要像DataContractAttribute这样的属性 - 有一个单独的API可用于配置类型而不使用属性,非常适合那些您无法访问的类型。 - Marc Gravell

1

XmlSerializer类不需要将对象标记为可序列化,但它只保存公共字段和属性。如果您需要序列化私有成员,则除非编写自己的序列化程序,否则无法实现。


1
BinaryFormatter会抛出异常,直到序列化目标的每个成员都被标记为[Serializable]。 - Viacheslav Smityukh
无论如何,XmlSerializer不需要[Serializable],可以用于序列化。 - Viacheslav Smityukh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接