可操作的列表项不会使用二进制格式化程序进行反序列化。C# Xamarin



我有一个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
}

您需要实际提供序列化功能(实现接口(。其中包括为所有包含的对象调用序列化函数。默认情况下,可序列化列表和数组执行此操作。而目前建议的都正确实施。

默认(反(序列化程序只能覆盖所有公共字段。任何更复杂的(私有甚至只读属性(都超出了它的范围。

最新更新