【问题标题】:save c# object to disk将 c# 对象保存到磁盘
【发布时间】:2012-05-30 00:34:43
【问题描述】:

我想在 C# 中将对象保存/读取到磁盘。它的一些属性没有用 [Serializable] 标记。 有没有其他方法可以保存? 我不关心磁盘上对象的格式,我只想将它转储到磁盘并读取它。

有什么建议吗?

【问题讨论】:

  • 如果它是一个相当简单的对象,您可以将其保存为带有属性名称及其值的 XML。
  • 我已经删除了我的答案,因为即使它是正确的,它也被否决了。请看stackoverflow.com/questions/1596317/…

标签: c# .net serialization


【解决方案1】:

建议的 XmlSerializer 的替代方案是 protobuf-net。它是由 SO/StackExchange 自己的 Marc Gravell 编写的 Google protobuf 的 .net 实现。 请注意,您必须有权访问这些对象,因为 protobuf-net 仅支持以下自定义类:

  • 被标记为数据合同
  • 有一个无参数的构造函数
  • 对于 Silverlight:公开

如果这对您不起作用,您可以编写自己的解决方案,或者根据您的范围,使用像 eloquera 这样的对象数据库。

【讨论】:

  • +1 为 Eloquera。它可以在嵌入模式下工作,序列化任何复杂的对象,不需要[Serializable]属性。
  • 作为初始化更正:您不需要需要无参数构造函数 - 支持 ctor 跳过。并且:您不需要 DataContractAttribute 之类的属性 - 有一个单独的 API 可以在不使用属性的情况下配置类型,非常适合您无权访问的类型。
【解决方案2】:

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

【讨论】:

  • BinaryFormatter 会抛出异常,直到序列化目标的每个成员都被标记为 [Serializable]
  • 是的。感谢您的警告。
  • 反正XmlSerializer不需要[Serializable],可以用来序列化。
猜你喜欢
  • 2011-04-09
  • 2014-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-02
  • 1970-01-01
相关资源
最近更新 更多