我有以下课程:
[Serializable]
public class A : ISerializable
{
List<B> listOfBs = new List<B>();
public A()
{
// Create a bunch of B's and add them to listOfBs
}
public A(SerializationInfo info, StreamingContext context)
{
listOfBs = (List<B>)info.GetValue("listOfBs",typeof(List<B>))
listOfBs.Remove(x=>x.s==5)
}
}
和
[Serializable]
public class B : ISerializable
{
public int s;
public B(int t)
{
s=t;
}
public B(SerializationInfo info, StreamingContext context)
{
s = info.GetInt32("s");
}
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("s",s);
}
}
该问题line listOfBs.Remove(x=>x.s==5)
引发异常,因为 B 的反序列化构造函数在 A 完成之前不会运行。当我单步执行代码时,A 的 listOfBs 只是一个 NULL 对象的条目,它与 listOfBs 中实际有多少 B 匹配
如何解决这个反序列化序列问题?