Десериализация класса, содержащего Список <T>: Почему Список первоначально заполнен Пустыми указателями?

У меня есть класс Bar который содержит a List<Foo>, с обоими Foo и Bar реализация ISerializable.

При десериализации a Bar, List<Foo> первоначально заполнено (корректное количество) nulls; затем при выходе Bar десериализация ctor, каждый Fooдесериализацию ctor называют, заполняясь List<Foo> с (правильно десериализованный) Foos.

Почему это происходит? Я не могу копировать его в тестовом проекте: независимо от того, что я попробовал, привел к Foo десериализация ctors называемый перед Bar ctor. Это - на самом деле поведение, которое я хотел бы, поскольку мне нужен список, чтобы быть заполненным, чтобы сделать некоторую инициализацию для десериализованного Bar!

У любого есть идея относительно того, что могло вызывать Foos, чтобы быть десериализованным настолько поздно?Спасибо!

9
задан Mike Two 8 March 2010 в 01:13
поделиться

1 ответ

Это логика. Десериализатор десериализовал его объект за объектом, а затем следуя ссылкам. Итак, сначала он устанавливает список с пробелами X ... которые на самом деле все равны NULL.

Затем он десериализует объект за объектом, помещая их в соответствующие ссылки.

Вся логика проверки и т. Д. От вас должна запускаться ТОЛЬКО ПОСЛЕ завершения десериализации - по определению у вас всегда должны быть частичные / недопустимые состояния во время работы десериализатора.

Проблема, почему все делается так поздно, вероятно, заключается в том, что ваш тестовый сценарий намного проще, чем реальные данные, поэтому что-то заставляет сериализатор «изменить порядок» на производственной стороне.

5
ответ дан 3 November 2019 в 07:13
поделиться
Другие вопросы по тегам:

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