向相关类提供不同的数据

时间:2012-05-23 12:53:31

标签: c# .net oop design-patterns

我有一个名为WebAction的课程。还有一些类继承自WebAction,如LoginStartWebActionLoginConfirmWebActionSearchWebAction等。它们所有的共同点很多,但也有一个很大的区别。每个都需要不同的数据集才能工作,但都需要一些数据。 到目前为止,我有一个属性

object DataObject {get; set;}

在每个对象中,我将它们转换为适合于此指定类的类型(在大多数情况下是一些复杂类型)。

我正在使用它:

Object data = DataSet;    
for (int i = stepNo; i < _actions.Count; i++)
    {
        _actions[i].SetData(data);
        Response actionResponse = _actions[i].Perform();
        ThrowErrorIfServerError(actionResponse);
        if (i < _actions.Count - 1)
        {
            data = _actions[i].PrepareDataFor(_actions[i + 1].GetType());
        }
     }

但是现在我必须序列化这个DataObject并将其保存在某个地方。我无法序列化object类型,因为它可能就是一切。

有没有什么好方法可以为一个班级提供不同但可序列化的数据?

2 个答案:

答案 0 :(得分:1)

如果您在基类中拥有属性,则它必须是对象类型。

如果您在派生类型中拥有属性,则它可以是任何类型。

您尚未指定使用的序列化程序/格式化程序。

如果您使用XmlSerializer,则不需要任何内容​​,所有公共属性都将被序列化。

如果您使用DataContractSerializer,则必须使用KnownType属性指定所有可能类型的数据对象。

如果您使用的是BinaryFormatter,则只有先决条件是派生类型必须是可序列化的。

如果您正在使用任何其他序列化程序,它将取决于序列化程序的API设计,它如何接受自定义类型信息(在序列化/反序列化期间,如果确实需要此信息)。

答案 1 :(得分:0)

如果使用BinarySerializer对其进行序列化,它将在序列化输出中包含类型,以便您可以稍后将其反序列化为相同类型,即使您将其作为对象传递。