0

我有课叫WebAction。还有一些继承自WebAction, LoginStartWebAction,等的类LoginConfirmWebActionSearchWebAction它们有很多共同点,但也有一个很大的不同。每一个都需要不同的数据集才能工作,但都需要一些数据。到目前为止,我有一个财产

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类型,因为它可能是一切。

有没有什么好方法可以向一个类族提供不同但可序列化的数据?

4

2 回答 2

1

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

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

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

如果您使用的是XmlSerializer,则不需要任何东西,所有公共属性都将被序列化。

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

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

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

于 2012-05-23T16:50:53.177 回答
0

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

于 2012-05-23T12:58:01.033 回答