У меня есть класс Bar
который содержит a List<Foo>
, с обоими Foo
и Bar
реализация ISerializable.
При десериализации a Bar
, List<Foo>
первоначально заполнено (корректное количество) null
s; затем при выходе Bar
десериализация ctor, каждый Foo
десериализацию ctor называют, заполняясь List<Foo>
с (правильно десериализованный) Foo
s.
Почему это происходит? Я не могу копировать его в тестовом проекте: независимо от того, что я попробовал, привел к Foo
десериализация ctors называемый перед Bar
ctor. Это - на самом деле поведение, которое я хотел бы, поскольку мне нужен список, чтобы быть заполненным, чтобы сделать некоторую инициализацию для десериализованного Bar
!
У любого есть идея относительно того, что могло вызывать Foo
s, чтобы быть десериализованным настолько поздно?Спасибо!
Это логика. Десериализатор десериализовал его объект за объектом, а затем следуя ссылкам. Итак, сначала он устанавливает список с пробелами X ... которые на самом деле все равны NULL.
Затем он десериализует объект за объектом, помещая их в соответствующие ссылки.
Вся логика проверки и т. Д. От вас должна запускаться ТОЛЬКО ПОСЛЕ завершения десериализации - по определению у вас всегда должны быть частичные / недопустимые состояния во время работы десериализатора.
Проблема, почему все делается так поздно, вероятно, заключается в том, что ваш тестовый сценарий намного проще, чем реальные данные, поэтому что-то заставляет сериализатор «изменить порядок» на производственной стороне.