Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Сериализация Dictionary в SharedObject (http://www.flasher.ru/forum/showthread.php?t=178213)

Rundll 17.04.2012 10:55

Сериализация Dictionary в SharedObject
 
Здравствуйте!

Про сериализацию на форуме писали много, но по своей проблеме я так ничего и не нашел. Экспериментировал с сохранением массива заполненного объектами Dictionary (ключ String, значение Int) в SharedObject. При этом все Dictionary одинаковые. Столкнулся с тем, что при десериализации читается 1-й объект Dictionary, а последующие равны null. Тот же эксперимент с ArrayCollection окончился успешно. IExternalizable и RegisterAliasClass юзаю. Кстати, если открыть получившийся файл (что с массивом Dictionary, что с массивом ArrayCollection) в нем содержится первый элемент массива, а ниже файл заполнен спецсимволами, это ошибка записи или в AMF используются алгоритмы сжатия?

wvxvw 17.04.2012 15:24

ОК, для начала внесем немного ясности:
1. Dictionary можно сериализовать прямо как есть.
2. Прямо как есть сериализуется с багами (если было занесено два ключа простых типов, а потом один из ключей удалили, то другой остается при условии что строковое представление ключей одинаковое).
3. Баг легко избегается потому что Dictionary никогда не нужно использовать с ключами примитивных типов (т.как это вобщем-то и не возможно). Поскольку Dictionary является динамическим классом то при попытке записать в него ключ простого типа в первую очередь будет сделана попытка записать его как свойство динамического класса, а не как ключ. (Если по-простому, вы его будете использовать как будто это обычный Object или любой другой динамический объект).
4. ArrayCollection - это класс противопоказаный к использованию в любой ситуации. Если бы вы могли его удалить из фреймворка - это было бы самым оптимальным вариантом. Его никогда и ни в коем случае не нужно сериализировать уже хотя бы потому, что вы не сохраните порядок в массиве, фильтр, позиции курсоров / закладок и т.п. Этот класс был написан паталогическими идиотами которых неизвестно где раскопала компания Адоби, поэтому даже близкий контакт с этим классом способен привести к легкой форме шизофрении.
5. Вы добъетесть абсолютно того же эффекта что и от сериализации ArrayCollection если будете сериализовать ее source свойство. С той разницей, что будет по-крайней мере очевидно, что вы делаете. При этом вы сэкономите пару тактов процессора и, что немаловажно, зависимости к флексовому фреймворку.

Rundll 18.04.2012 10:04

Ок, спасибо за прояснение ситуации, ArrayCollection стараюсь избегать. Вопрос собственно таков: почему объект Dictionary сам по себе сериализуется без проблем, а Array of Dictionary - не сериализуется вообще. Вру, он вроде сериализуется (файл создается), но не десериализуется. Точнее даже так, первый элемент читается, второй и третий - нет, четвертый читается, последующие - нет и т.д. В конце концов я перехватывал по крайней мере 2 ошибки, одна из которых Error #2006: The supplied index is out of bounds. ArrayCollection воспользовался чисто из любопытства. Таким образом подставив ArrayCollection вместо Dictionary и получив Array of ArrayCollection сериализация прошла успешно, что подтвердилось успешной десериализацией.


Часовой пояс GMT +4, время: 00:43.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.