Binary Deserialization bug?
От: Almas  
Дата: 20.01.05 13:53
Оценка:
Столкнулся со странным поведением во время бинарной десериализации ...
Имеется такой код:

[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


Почему не работает, какие есть идеи?
И как можно это обойти?
Re: Binary Deserialization bug?
От: Almas  
Дата: 21.01.05 07:13
Оценка:
так никто и не знает?
Re[2]: Binary Deserialization bug?
От: Voyachek Vladislav  
Дата: 21.01.05 12:50
Оценка:
Здравствуйте, Almas, Вы писали:

A>так никто и не знает?


Это сделано by design , можешь посмотреть в reflector'e как сделана hashtable, там в OnDeserialization восстановление и происходит. Обойти это никак нельзя. Я нашел только один выход — сериализовать не hastable а массив из ключей и значений. А в OnDeserialization уже своего класса восстанавливать hashtable.
... << RSDN@Home 1.1.4 @@subversion >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.