Сериализация AS3 вектора пользовательских объектов

На что похожа поддержка сериализации для нового класса Vector? У меня есть Vector.<GameMove>, который я хотел бы сериализовать в ByteArray. GameMove — это пользовательский класс.

Я предполагаю, что необходимо вызвать registerClassAlias() на GameMove, но нужно ли также регистрировать Vector.<GameMove>? Это особый тип или он как бы состоит из этих двух типов?


person aaaidan    schedule 26.03.2010    source источник


Ответы (2)


Отправитель всегда имеет контроль над тем, какой класс используется при сериализации объекта. Например, Fluorine будет отправлять все, что реализует IList в .NET, как ArrayCollection клиенту Flex или Array клиенту Flash. В этом случае нет другого выбора, кроме как использовать ArrayCollection или Array.

Другие реализации AMF могут отличаться. Fluorine обрабатывает зарегистрированные псевдонимы классов последними, но другие могут делать это первыми. Таким образом, будет ли Vector.‹> правильно сериализован в обоих направлениях, зависит от используемого вами сервера.

Лучший способ узнать, работает ли он с вашим сервером, — просто протестировать его. Затем, если это не сработает, задайте более конкретный вопрос, чтобы узнать, есть ли обходной путь или это считается ошибкой.

person Samuel Neff    schedule 26.03.2010
comment
Спасибо, Сэм. Хотя на самом деле я не сериализуюсь на сервер, а просто в ByteArray для сохранения, поэтому для меня важна внутренняя реализация amf3 проигрывателя. - person aaaidan; 29.03.2010

Как оказалось, нет, вектор, содержащий пользовательский тип, не нужно регистрировать как «пару», в дополнение к типу, который он содержит.

На самом деле, похоже, что Vector вообще не нужно регистрировать - просто тип, который он держит. По крайней мере, в моем случае сериализации в ByteArray (конечно, AMF3).


Однако, в стороне, я обнаружил очень странную проблему, когда подклассы Array не могут быть десериализованы. Я отправлю это в отдельный вопрос.

person aaaidan    schedule 28.03.2010