我有一个 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部分伪造数据,但没有任何效果。我不知道为什么错误会在反序列化链中冒出来,我不知道如何阻止它。
如果有人对我应该去哪里寻求解决此问题的任何想法,我将非常感谢您的反馈。
谢谢, 丹