|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
[+1 02.09.15]
Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
|
Сериализация/десириализация объектов, классы которых наследуются от Dictionary
В общем, не получается
Пример кода: Класс: package testPack { import flash.net.registerClassAlias; import flash.utils.Dictionary; import flash.utils.IDataInput; import flash.utils.IDataOutput; import flash.utils.IExternalizable; [RemoteClass(alias="testPack.Test")] public dynamic class Test extends Dictionary implements IExternalizable { protected var tested:Boolean = false; public function Test(weakKeys:Boolean = false):void { super(weakKeys); registerClassAlias("flash.utils.Dictionary", Dictionary); registerClassAlias("testPack", Test); } public function readExternal(input:IDataInput):void { tested = input.readBoolean(); trace("READ:"); trace("tested = " + tested); } public function writeExternal(output:IDataOutput):void { output.writeBoolean(tested); trace("WRITE:"); trace("tested = " + tested); } } } var test1:Test = new Test(); trace(test1); // [object Test] var bytes:ByteArray = new ByteArray(); bytes.writeObject(test1); bytes.position = 0; var test2:Test = bytes.readObject() as Test; bytes.position = 0; trace(test2); // null Заранее спасибо за ваше потраченное время. |
|
|||||
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Не всё сериализируется/рассериализируется тупо через writeObject/readObject, что могу сказать, например ещё
http://www.flasher.ru/forum/showthre...sterClassAlias IExternalizable не про writeObject/readObject, его, как я понял, используют где-то так:
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
[+1 02.09.15]
Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
|
Думаю явно не так, хоть и не пробовал его так использовать.
Дело в том, что для правильной сериализации/десиреализаци комплексных объектов (записи в массив байтов) - необходимо, чтобы они имплементили интерфейс IExternalizable, о чем и сказал wvxvw в этой теме http://www.flasher.ru/forum/showthre...sterClassAlias. В общем я делал так, и все всегда получалось. А вот теперь наткнулся на класс, который наследуется от Dictionary и застрял, так как из-з этого почему-то не работает. Хотя по идее в методах ByteArray writeObject() и readObject() должна делаться проверка на то, реализует ли объект интерфейс IExternalizable, а тут возникает такое чувство, что она не выполняется. |
|
|||||
__________________
http://cleptoman.free-lance.ru achivements: дважды благословлен на воровство. осеяный благодатью |
|
|||||
[+1 02.09.15]
Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
|
Без приведения получается просто [object Dictionary]. Ну оно и правильно, что просто Dictionary. У меня расставленны трейсы в методах readExternal и writeExternal у класса, который наследуется от него, и они молчат.
Проблемма именно в классах, которые наследуется от Dictionary. так как я пробовал наследоваться и от Object, и от EventDispatcher. И все работает. А от Dictionary нет. |
|
|||||
Попробуйте регистрировать свой класс, через flash.net.registerClassAlias(). То, что для хранения объектов в SharedObject (где используется AMF) регистрировать свой класс надо - я знаю, а вот для ByteArray..
UPD: нужно - вот: http://blog.webdeely.com/2009/03/sto...-for-air-apps/
__________________
if (love is true) break my.heart; |
|
|||||
[+1 02.09.15]
Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
|
В написанном мною примере тестового класса - он регистрирует себя с помощью registerClassAlias() в констрокторе, причем регистрирует не только себя, но и Dictionary, от которого наследуется и все равно ен помогает. http://blog.webdeely.com/2009/03/sto...-for-air-apps/ - это я уже читал, там не для Dictionary, в таких случаях и у меня все ок. Попробуйте в примере, который я выложил заменить Dictionary на Object или EventDispatcher и все заработает.
|
|
|||||
__________________
http://cleptoman.free-lance.ru achivements: дважды благословлен на воровство. осеяный благодатью |
|
|||||
[+1 02.09.15]
Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
|
не
Если повнимательней посмотреть код, который я выложил - там эта строчка есть. Я еще много раз написал до этого, что все дело именно в Dictionary, если наследоваться от других классов - все работает. Я уже склонен верить, что это баг флэш плэера. Надеюсь кто-нибудь знающий объянит в чем дело и почему так. |
|
|||||
блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
|
Меня слегка напрягает что алиас регистрируется в классе что сериализуется. Это нормальная практика?
__________________
Тут мужик танцует и поёт про флэш |
Часовой пояс GMT +4, время: 15:12. |
|
« Предыдущая тема | Следующая тема » |
|
|