如何实现我的序列化方法,使其多态和可扩展

本文关键字:多态 可扩展 方法 序列化 何实现 实现 我的 | 更新日期: 2023-09-27 18:05:56

目前我所有的对象都包含保存和加载方法。这些方法基本上是创建xml文档。内部对象使用各自的保存方法(有时是其接口)进行序列化。现在我想在一些对象中做不同的序列化。所以基本上我希望能够从一个版本的序列化转换到另一个版本。

一种方法是将序列化逻辑从类本身分离到一个单独的类中(有点像microsoft的xmlserializer),从而扩展功能,但是当一个对象的类型对我来说是未知的,因为它是基类或接口时,我会遇到一个问题。

是否有另一个,更好的方法(使用XmlSerializer或DataContractSerializer以外)?

谢谢,帕维尔

如何实现我的序列化方法,使其多态和可扩展

如果我理解正确(注释),您有一个现有的Save(…)方法,每个实现提供-并且不想为不同的布局添加Save2(…)。

在这种情况下,我将简单地添加任何定义新格式的参数。如果它可能涉及多个东西(可能是版本号和格式),我会写一个类,如SerializationContext与这些东西作为属性,并修改现有的保存,即

Save(..., SerializationContext ctx)

任何现有的代码可能会完全忽略ctx,但必要时,您的类可以选择检查ctx.Versionctx.Format等,以适当地表现。如果需要,您还可以在以后的日期向SerializationContext添加其他内容。