私は次のクラスを持っています:
[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 は、実際に listOfBs にある B の数と一致する NULL オブジェクトのエントリにすぎません。
この逆シリアル化シーケンスの問題をどのように解決しますか?