序列化:更改基础类会是一个问题吗?

本文关键字:一个 问题 基础类 序列化 | 更新日期: 2023-09-27 18:36:52

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

序列化:更改基础类会是一个问题吗?

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

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

考虑 Jon 的 anwer 以获取更多提示,尤其是具有NonSerializedOptionalField属性的提示。

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

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

对于 BinaryFormatter 和 SoapFormatter

  • 如果添加新属性,则需要使用 OptionalField 属性修饰它们,以便仍然可以反序列化没有新字段的旧版本的对象。
  • 如果要"删除"属性,则必须将它们保留在代码中,但使用 OptionalField 属性修饰它们,以便您仍然可以反序列化仍具有已删除字段的旧版本的对象。
我可以

代表XmlSerializer,因为它在我自己的项目中被广泛使用。

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