gpt4 book ai didi

.NET 序列化类设计问题

转载 作者:行者123 更新时间:2023-12-02 02:38:47 26 4
gpt4 key购买 nike

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

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

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

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

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

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

最佳答案

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

关于.NET 序列化类设计问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56005/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com