我有一个ISerializable
类,其中包含来自抽象类的ISerializable
项列表,但派生类的实际对象并不ISerializable
。每当我尝试反序列化ScheduledTasksController
时,都会调用它的构造函数,并且正确反序列化scheduledTasks
。但是,列表的项为 null,并且不调用ScheduledTask
的构造函数,即使序列化工作正常也是如此。关于我可能做错了什么的任何想法?提前谢谢。
代码如下:
[Serializable]
public class ScheduledTasksController:ISerializable
{
private List<ScheduledTask> scheduledTasks = new List<ScheduledTask>();
public ScheduledTasksController(SerializationInfo info, StreamingContext context)
{
scheduledTasks = (List<ScheduledTask>)info.GetValue("tasks", typeof(List<ScheduledTask>));
}
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("tasks", scheduledTasks, typeof(List<ScheduledTask>));
}
}
[Serializable]
public abstract class ScheduledTask:ISerializable
{
public ScheduledTask(SerializationInfo info, StreamingContext context)
{
//code
}
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
//code
}
}
[Serializable]
public class RepeatingScheduledTask : ScheduledTask
{
//code
}
[Serializable]
public class OneTimeScheduledTask : ScheduledTask
{
//code
}
您需要实际提供序列化功能(实现接口(。其中包括为所有包含的对象调用序列化函数。默认情况下,可序列化列表和数组执行此操作。而目前建议的都正确实施。
默认(反(序列化程序只能覆盖所有公共字段。任何更复杂的(私有甚至只读属性(都超出了它的范围。