序列化:更改基础类会是一个问题吗?
本文关键字:一个 问题 基础类 序列化 | 更新日期: 2023-09-27 18:36:52
我正在尝试围绕序列化。但是,如果出于任何原因我需要添加或删除某些值或属性,会发生什么情况?这将如何影响内容?或者这不是问题?或者我怎样才能避免这种情况?
正如人们已经指出的那样,这取决于您的序列化程序。 在这种情况下,XmlSerializer
更容易处理:
- 序列化程序对公共接口工作,因此,如果您更改实现,则不会出现任何问题。 XML
- 是人类可读的,因此很容易手动解析或使用某些 XML 实用程序解析。因此,如果其他一切都出错,您可以编写版本转换器。
考虑 Jon 的 anwer 以获取更多提示,尤其是具有NonSerialized
和OptionalField
属性的提示。
这完全取决于您使用的序列化技术以及您是否计划反序列化旧对象。
我相信,如果您添加或删除属性并且仍然想要反序列化对象的旧版本,您可能会遇到一些问题,具体取决于您正在执行的序列化类型。
对于 BinaryFormatter 和 SoapFormatter:
- 如果添加新属性,则需要使用 OptionalField 属性修饰它们,以便仍然可以反序列化没有新字段的旧版本的对象。
- 如果要"删除"属性,则必须将它们保留在代码中,但使用 OptionalField 属性修饰它们,以便您仍然可以反序列化仍具有已删除字段的旧版本的对象。
我可以
代表XmlSerializer,因为它在我自己的项目中被广泛使用。
添加属性不会导致 XmlSerializer 出现任何问题,序列化 xml 中缺少的属性将仅保留其默认值。 删除或重命名现有属性的效果只是数据丢失。 除非处理原始 xml AS xml 或文本文件,否则删除或重命名的属性中的数据只会丢失。 使用 XmlSerializer 时,添加、删除或重命名属性不需要特殊属性。