Привет! Я пытаюсь сериализовать данные в AS3, но столкнулся с неприятной проблемой. Первоначально у меня были проблемы с тем, что "myObjClass" не был конвертируемым, но после того, как я обнаружил "registerClassAlias", все стало работать нормально.
Некоторое время спустя я добавил векторы в myObjClass. У меня раньше были проблемы с векторными строками, о чем сообщалось здесь:
https://bugs.adobe.com/jira/browse/FP-6693
Итак, я знаю, что обходной путь должен включать:
registerClassAlias("String", String);
Я просто не уверен, как зарегистрировать псевдоним для подвектора в векторе (вместе с другими переменными). Вот мой код:
var newObj:myObjClass = new myObjClass();
newObj.mySubXML = new Vector.<XML>();
newObj.mySubString = new Vector.<String>();
var myObj:Vector.<myObjClass> = new Vector.<myObjClass>();
myObj.push(newObj);
registerClassAlias("String", String); // Problem #1
registerClassAlias("XML", XML); // Problem #1
registerClassAlias("VecMyObjClass", Vector.<myObjClass> as Class); // Problem #2
// registerClassAlias("myObjClass", myObjClass); // This and the above are interchangable (same errors)
var bytes:ByteArray = new ByteArray();
bytes.writeObject(myObj);
bytes.position = 0;
myObj = bytes.readObject();
Проблема №1: Когда эти две строки включены в мою компиляцию, последняя строка (bytes.readObject ()) выдает ошибку:
Error #1034: Type Coercion failed: cannot convert __AS3__.vec::Vector.<Object>@42edb21 to __AS3__.vec.Vector.<myObjClass>.
Это действительно странно. Это как если бы первые два registerClassAlias отменяли третий.
Проблема №2: если я закомментирую две строки «первой проблемы» (строковые / xml-регистрации классов), он отлично преобразует myObj в myObjClass; внутренняя ошибка не возникает, и приложение не останавливается. Однако ему не удается преобразовать внутренние векторы String и XML, и эта ошибка появляется в выводе приложения (без остановки):
TypeError: Error #1034: Type Coercion failed: cannot convert __AS3__.vec::Vector.<Object>@3aabc11 to __AS3__.vec.Vector.<XML>.
TypeError: Error #1034: Type Coercion failed: cannot convert __AS3__.vec::Vector.<Object>@3aabc41 to __AS3__.vec.Vector.<String>.
Итак, мой вопрос: как я могу зарегистрировать псевдоним класса для:
- Вектор. (MyObjClass)
- Вектор строк как свойство Vector. (MyObjClass)
- Вектор XML как свойство Vector. (MyObjClass)
Все одновременно?