我有一个班级Bar
,其中包含List<Foo>
,同时Foo
和Bar
实现了ISerializable。
在对Bar
进行反序列化时,List<Foo>
最初会填充(正确数量)null
s;然后在退出Bar
反序列化ctor时,会调用每个Foo
的反序列化ctor,并使用(正确反序列化的)List<Foo>
填充Foo
。
为什么会这样?我无法在测试项目中复制它:无论我尝试过什么导致Foo
反序列化的ctors在 Bar
ctor之前被称为。这实际上是我想要的行为,因为我需要填充列表以便为反序列化的Bar
做一些初始化!
任何人都知道可能导致Foo
被反序列化的原因是什么?谢谢!
答案 0 :(得分:5)
这是逻辑。反序列化器按对象反序列化它,然后跟随引用。所以,首先它设置带有X空格的List ......实际上它们都是NULL。
然后它逐个进入并反序列化对象,将它们放入正确的引用中。
来自您的所有检查等逻辑应仅在反序列化完成后运行 - 根据定义,在解串器运行时,您必须始终具有部分/无效状态。
为什么事情迟到的问题可能是因为你的测试场景比实际数据容易得多,所以有些东西会让序列化器在生产方面“扭转秩序”。