反序列化包含List <T>的类:为什么List最初用Null填充?

Joe*_* Gö 9 c# serialization list

我有一个类Bar包含一个List<Foo>,既FooBar实施了ISerializable.

反序列化a时Bar,List<Foo>最初填充(正确数量)nulls; 然后在退出Bar反序列化时,Foo调用每个反序列化的ctor,填充List<Foo>(正确反序列化)Foos.

为什么会这样?我无法在测试项目中复制它:无论我尝试过什么导致Foo反序列化的ctors 在ctor 之前被调用Bar.这实际上是我想要的行为,因为我需要填充列表以便为反序列化做一些初始化Bar!

任何人都知道什么可能导致Foos被反序列化这么晚?谢谢!

小智 5

这是逻辑.反序列化器按对象反序列化它,然后跟随引用.所以,首先它使用X空格设置List ...实际上所有都是NULL.

然后它逐个进入并反序列化对象,将它们放入正确的引用中.

来自您的所有检查等逻辑应仅在反序列化完成后运行 - 根据定义,在反序列化器运行时,您必须始终具有部分/无效状态.

为什么事情迟到的问题可能是因为你的测试场景比实际数据容易得多,所以有些东西会让序列化器在生产方面"扭转秩序".