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

时间:2012-06-12 16:29:49

标签: c# class serialization

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

3 个答案:

答案 0 :(得分:2)

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

  1. 序列化程序对公共接口起作用,因此如果更改实现,则不会出现任何问题。
  2. XML是人类可读的,因此易于手动或使用某些XML实用程序进行解析。因此,如果出现其他任何问题,您可以编写版本转换器。
  3. 考虑使用Jon的答案获取更多提示,尤其是NonSerializedOptionalField属性。

答案 1 :(得分:1)

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

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

BinaryFormatter SoapFormatter

  • 如果添加新属性,则需要使用OptionalField Attribute对其进行装饰,以便仍然可以反序列化没有新字段的旧版本对象。
  • 如果您要“删除”属性,则必须将它们保留在代码中,但使用OptionalField Attribute装饰它们,这样您仍然可以反序化仍旧删除字段的旧版本对象。< / LI>

答案 2 :(得分:1)

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

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