如何在捕获错误时正确反序列化对象

时间:2010-06-28 15:27:29

标签: actionscript-3 serialization air

我有一个 DataFile 类,它是我序列化的顶级类。 DataFile 包含 ArrayCollection ,其中包含扩展 ArrayData 的对象,每个对象以不同方式覆盖 readExternal

在开发过程中,版本1.0中的 ArrayData 对象现在与版本1.1中的 ArrayData 对象不同。

这会导致反序列化失败,通常会出现空对象错误。

这是预期的行为。我想要发生的是,如果发生错误,对象将被忽略,我们将继续反序列化。

为了实现这一点,我将try..catch逻辑抛入 ArrayData 的反序列化

override public function readExternal(input:IDataInput):void {
  try {
    testvalue = input.readObject();
    newTestValue = input.readObject(); //a value that is not a part of the file being deserialized
  catch(e:Error){
    //an error occurred, but just keep going
  }
} 

我希望这会允许反序列化链继续执行它的事情,然后允许我在反序列化所有内容后清理损坏的数据。

我现在遇到的问题是 ArrayCollection 的序列化在错误被 ArrayData 对象捕获并且索引超出范围错误后立即失败。

  

错误#2006:提供的索引已经用完   边界。

我尝试在te ArrayData 对象的catch部分伪造数据,但没有任何效果。我不知道为什么错误会在反序列化链中冒出来,我不知道如何阻止它。

如果有人对我应该去哪里寻求解决此问题的任何想法,我将非常感谢您的反馈。

谢谢, 丹

0 个答案:

没有答案