Странное поведение двоичной сериализации.NET на Словаре <Ключ, Значение>

16
задан Peter Mortensen 20 February 2010 в 18:28
поделиться

3 ответа

Я могу воспроизвести проблему. Взглянувший вокруг Google и найденный этим: http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=94265 , хотя я не уверен, что это - та же самая проблема, это кажется довольно подобным.

РЕДАКТИРОВАНИЕ:

я думаю, что добавление этого кода, возможно, решило проблему?

    public void OnDeserialization(object sender)
    {
            this.Dictionary.OnDeserialization(sender);
    }

Никакое время для исчерпывающего тестирования, и я хочу победить Marc к ответу ;-)

8
ответ дан 30 November 2019 в 22:02
поделиться

Да, Вы обнаружили раздражающую причуду в 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);
}
10
ответ дан 30 November 2019 в 22:02
поделиться

Интересный... для получения информации, я попробовал его основанным на атрибуте подходом (ниже), и это ведет себя то же... очень любопытное! Я не могу объяснить это - я просто отвечаю, чтобы подтвердить воспроизведенный и упомянуть [OnDeserialized] поведение:

[OnDeserialized] // note still not added yet...
private void OnDeserialized(StreamingContext context) {...}

Редактирование - найденный выпуском "подключения" здесь . Попытайтесь добавить к своему обратному вызову:

Dictionary.OnDeserialization(this);
4
ответ дан 30 November 2019 в 22:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: