我有一个名为WebAction
的课程。还有一些类继承自WebAction
,如LoginStartWebAction
,LoginConfirmWebAction
,SearchWebAction
等。它们所有的共同点很多,但也有一个很大的区别。每个都需要不同的数据集才能工作,但都需要一些数据。
到目前为止,我有一个属性
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
类型,因为它可能就是一切。
有没有什么好方法可以为一个班级提供不同但可序列化的数据?
答案 0 :(得分:1)
如果您在基类中拥有属性,则它必须是对象类型。
如果您在派生类型中拥有属性,则它可以是任何类型。
您尚未指定使用的序列化程序/格式化程序。
如果您使用XmlSerializer,则不需要任何内容,所有公共属性都将被序列化。
如果您使用DataContractSerializer,则必须使用KnownType属性指定所有可能类型的数据对象。
如果您使用的是BinaryFormatter,则只有先决条件是派生类型必须是可序列化的。
如果您正在使用任何其他序列化程序,它将取决于序列化程序的API设计,它如何接受自定义类型信息(在序列化/反序列化期间,如果确实需要此信息)。
答案 1 :(得分:0)
如果使用BinarySerializer对其进行序列化,它将在序列化输出中包含类型,以便您可以稍后将其反序列化为相同类型,即使您将其作为对象传递。