代码之家  ›  专栏  ›  技术社区  ›  Joel in Gö

反序列化包含列表的类:为什么列表最初填充为空?

  •  9
  • Joel in Gö  · 技术社区  · 16 年前

    我有课 Bar 其中包含一个 List<Foo> ,两者都有 Foo 和 酒吧 实现ISerializable。

    当反序列化 酒吧 这个 列表<Foo> 最初填充(正确数量的) null s然后在退出 酒吧 反序列化,每个 福 调用的反序列化构造函数,填充 列表<Foo> 使用(正确反序列化) 福 s

    为什么会这样?我无法在测试项目中复制它:无论我尝试了什么,都会导致失败 福 之前 这个 酒吧 克托尔。这实际上是我想要的行为,因为我需要填写列表,以便对反序列化的文件进行初始化 酒吧 !

    有人知道是什么导致了这场灾难吗 福 这么晚才被反序列化?谢谢

    1 回复  |  直到 16 年前
        1
  •  6
  •   TomTom    16 年前

    这是逻辑。反序列化程序逐个对象反序列化它,然后执行以下引用。所以,首先它用X空格建立列表。。。实际上都是空的。

    然后它进入并逐个对象反序列化对象,将它们放入适当的引用中。

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

    问题是为什么这么晚才完成这些事情,这是因为您的测试场景比实际数据容易得多,所以有些东西会让序列化程序在生产端“改变顺序”。

    推荐文章