多态对象的序列化/反序列化模式

3

我需要序列化/反序列化一个多态继承体系,但是对于格式我有些不清楚。

我想,每个独特的对象类型应该自己进行序列化,从一个“魔数”开始,表示工厂后来需要反序列化的类型。然而,反序列化应该由各个类处理还是由工厂显式地完全处理呢?

我想,如果反序列化由各个类处理,那么它将更加“优雅”和结构化,但是考虑到大多数(如果不是全部)对象都继承自其他对象,并且必须使用数据来初始化基类构造函数,我有点不清楚继承类的成员方法如何能够实现这一点,因为基类的初始化必须在其之前进行。

另一种方式是将反序列化方法与各个类分离,并将所有代码移动到工厂中,但这将使实现反序列化以完全相反的方式变得更加困难。这意味着我必须提取每个类完整继承链所需的所有数据,将其放入堆栈中,并使用它来调用适当的构造函数。

对此有什么想法吗?

1个回答

1
序列化和反序列化应该尽可能对称。最好由类本身通过反序列化函数(例如operator>>())完成,因此工厂根据ID创建类,然后将流传递给反序列化函数。该函数可以调用基类的反序列化函数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接