Я могу воспроизвести проблему. Взглянувший вокруг Google и найденный этим: http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=94265 , хотя я не уверен, что это - та же самая проблема, это кажется довольно подобным.
РЕДАКТИРОВАНИЕ:
я думаю, что добавление этого кода, возможно, решило проблему?
public void OnDeserialization(object sender)
{
this.Dictionary.OnDeserialization(sender);
}
Никакое время для исчерпывающего тестирования, и я хочу победить Marc к ответу ;-)
Да, Вы обнаружили раздражающую причуду в Dictionary<TKey, TValue>
десериализация. Можно обойти его путем ручного вызова словаря OnDeserialization()
метод:
public void OnDeserialization(object sender)
{
Dictionary.OnDeserialization(this);
TestsLengthsOfDataStructures(this);
}
Кстати, можно также использовать эти [OnDeserialized]
атрибут, а не IDeserializationCallback
:
[OnDeserialized]
public void OnDeserialization(StreamingContext context)
{
Dictionary.OnDeserialization(this);
TestsLengthsOfDataStructures(this);
}
Интересный... для получения информации, я попробовал его основанным на атрибуте подходом (ниже), и это ведет себя то же... очень любопытное! Я не могу объяснить это - я просто отвечаю, чтобы подтвердить воспроизведенный и упомянуть [OnDeserialized]
поведение:
[OnDeserialized] // note still not added yet...
private void OnDeserialized(StreamingContext context) {...}
Редактирование - найденный выпуском "подключения" здесь . Попытайтесь добавить к своему обратному вызову:
Dictionary.OnDeserialization(this);