У меня есть класс DataFile , который является классом верхнего уровня, который я сериализую. DataFile содержит ArrayCollection , который, в свою очередь, содержит объекты, расширяющие ArrayData , каждый из которых по-разному переопределяет readExternal .
В процессе разработки объект ArrayData версии 1.0 теперь отличается от объекта ArrayData в версии 1.1.
Это приводит к сбою десериализации, чаще всего с ошибкой нулевого объекта.
Это ожидаемое поведение. Я бы хотел, чтобы в случае возникновения ошибки объект просто игнорировался, и мы продолжали десериализацию.
Для этого я бросил логику 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: указанный индекс отсутствует
границ.
Я пытался подделать данные в части catch объекта * ArrayData , но ничего не работает. Я не знаю, почему ошибка перепутывает цепочку десериализации, и я не знаю, как это предотвратить.
Если у кого-нибудь есть идеи о том, куда мне идти дальше в попытке решить эту проблему, я был бы признателен за отзыв.
Спасибо,
Dan