2

我正在努力解决序列化问题。但是,如果出于某种原因我需要添加或删除一些值或属性,会发生什么?这将如何影响内容?或者这不是问题吗?或者我怎样才能避免这种情况?

4

3 回答 3

2

正如人们已经指出的那样,这取决于您的序列化程序。XmlSerializer在这种情况下更容易处理:

  1. 序列化程序针对公共接口工作,因此如果您更改实现,则不会出错。
  2. XML 是人类可读的,因此很容易手动或使用一些 XML 实用程序进行解析。因此,如果其他一切都出错了,您可以编写一个版本转换器。

考虑 Jon 的回答以获取更多提示,尤其是使用NonSerializedOptionalField属性。

于 2012-06-12T18:09:30.410 回答
1

这完全取决于您使用的序列化技术以及您是否计划反序列化遗留对象。

我相信如果您添加或删除属性并且仍然想要反序列化旧版本的对象,您可能会遇到一些问题,具体取决于您正在执行的序列化类型。

对于BinaryFormatterSoapFormatter

  • 如果添加新属性,则需要使用OptionalField 属性来装饰它们,以便您仍然可以反序列化没有新字段的旧版本对象。
  • 如果您要“删除”属性,则必须将它们保留在代码中,但使用OptionalField 属性装饰它们,以便您仍然可以反序列化仍然具有已删除字段的对象的旧版本。
于 2012-06-12T16:37:12.663 回答
1

我可以为 XmlSerializer 说话,因为它在我自己的项目中被广泛使用。

添加属性不会导致 XmlSerializer 出现任何问题,序列化 xml 中缺少的属性只会保留其默认值。删除或重命名现有属性的效果只是数据丢失。除非您处理原始 xml AS xml 或文本文件,否则已删除或重命名的属性中的数据只会丢失。使用 XmlSerializer 时,不需要特殊属性来添加、删除或重命名属性。

于 2012-06-12T17:31:50.790 回答