使用序列化成员类反序列化对象
本文关键字:反序列化 对象 成员类 序列化 | 更新日期: 2023-09-27 18:31:59
我有以下类:
[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 的 listOfB 只是 NULL 对象的条目,与 listOfB 中实际有多少 B 匹配
如何解决这个反序列化序列问题?
Realize IDeserializationCallback. 当整个对象图的反序列化完成时,将调用 IDeserializationCallback.OnDeserialization
。
我相信 A 类将是实现它的最佳位置,您可以将问题代码放在A.OnDeserialization
中,如下所示。
[Serializable]
public class A : ISerializable, IDeserializationCallback
{
List<B> listOfBs = new List<B>();
public A()
{
// Create a bunch of B's and add them to listOfBs
}
public void OnDeserialization()
{
listOfBs.Remove(x=>x.s==5)
}
}