Столкнулся со странным поведением во время бинарной десериализации ...
Имеется такой код:
[Serializable]
class Child : IDeserializationCallback
{
private string name;
public Child(string name)
{
this.name = name;
}
public void OnDeserialization(object sender)
{
}
}
[Serializable]
class Parent : IDeserializationCallback
{
private Hashtable ht = new Hashtable();
public Parent()
{
ht.Add("Child1", new Child("1"));
ht.Add("Child2", new Child("2"));
}
public void OnDeserialization(object sender)
{
}
}
....
IFormatter formatter = new BinaryFormatter();
using (Stream stream = new FileStream(@"c:\parent.bin", FileMode.Open, FileAccess.Read, FileShare.None))
{
Parent p =(Parent)formatter.Deserialize(stream);
}
Десериализую объект Parent. Когда нахожусь в функции Parent.OnDeserialization ожидаю, что объект Parent уже полностью десериализован,однако хеш-таблица ht пуста! И элементы в нее загружаются после. Т.е. вначале onDeserialization вызывается у Parent'а и лишь затем у Child объектов.
Хотя описалово для IDeserializationCallback.OnDeserialization говорит
Runs when the entire object graph has been deserialized
Почему не работает, какие есть идеи?
И как можно это обойти?