.NET序列化类设计问题

.NET序列化类设计问题

.NET serialization class design issue

我们有一个相当大的对象图,需要以许多不同的方式(模式)对其进行序列化和反序列化。在某些模式下,我们希望对某些属性进行反序列化,而在某些模式下,则不希望对它们进行反序列化。在将来的模式中,属性的选项可能比是或否更多。现在的问题是我们如何实现这些模式。

方法A(使用反序列化构造函数和ISerializable.GetObjectData):

如果我们使用反序列化构造函数让图的每个对象自己进行序列化,那么对于所有不同的反序列化模式,我们都会得到很多切换。但是,这种方法的优点是所有反序列化逻辑都在一个位置,并且如果我们添加新属性,我们只需要修改ISerializable.GetObjectData和反序列化构造函数即可。另一个优点是对象可以考虑可能公开公开的内部状态。最重要的缺点是我们数据对象本身需要了解所有可能的序列化模式。如果需要新模式,则需要修改数据对象。

方法B(反序列化工厂类/方法):

另一种方法是为每个在外部进行序列化和反序列化的模式(例如GraphSerializer.SerializeObjectTypeX(ObjectTypeX objectToSerialze))的每种模式都具有某种反序列化工厂类/方法。这里的优点是,只要我们想要一个新模式,我们就只需添加一个新模式即可。 Factory Class / Method和我们的Dataobject不会被所有引入的序列化模式所困扰,主要的缺点是我必须为所有不同的模式一遍又一遍地编写相同的序列化代码。一个或两个属性,但是我将不得不再次为整个图形实现完整的逻辑,当我向数据对象添加新属性时,我需要更新所有工厂类。

所以我想知道是否有更好的方法来解决恕我直言的一般问题。甚至是.NET的最佳实践?还是我只是从错误的角度看待整件事?


为每种模式制作单独的序列化程序类(a-la XmlSerializer),继承或封装以避免重复。
使用属性的属性来标记是否以及如何在特定模式下序列化它们


推荐阅读