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

时间:2011-08-16 06:40:40

标签: c# serialization .net-4.0

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

一种方法是将序列化逻辑从类本身分离到一个单独的类(类似于microsoft的xmlserializer),从而扩展功能,但是当我不知道对象的类型因为它是基类时我遇到了问题或界面。

还有其他更好的方法(除了使用XmlSerializer或DataContractSerializer)吗?

谢谢, 帕维尔

1 个答案:

答案 0 :(得分:1)

如果我理解正确(评论),你有一个每个实现提供的现有Save(...)方法 - 并且不想为不同的布局添加Sa​​ve2(...)。

在这种情况下,我只需添加任何定义新格式作为参数。如果它可能涉及多个事物(可能是版本号和格式),我会编写一个类SerializationContext这样的东西作为属性,并修改现有的保存来采取这个,即

Save(..., SerializationContext ctx)

任何现有代码都可能完全忽略ctx,但是根据需要,您的类可以选择检查ctx.Versionctx.Format等,以使其行为正常。如果需要,您还可以在以后向SerializationContext添加其他内容。