2010-04-22 3 views
0

Как следует из названия, можно ли использовать AMF для кодирования/декодирования Словари (без подкласса, то есть)?Flash/Flex: Можно ли кодировать словарь с помощью AMF?

Например, вот тест:

function serializeAndReload(obj:*):* { 
    var serialized:ByteArray = new ByteArray(); 
    serialized.writeObject(obj); 
    serialized.position = 0; 
    return serialized.readObject(); 
} 

function test():void { 
    var d:Dictionary = new Dictionary(); 
    d[{}] = 42; 
    d[d] = true; 
    var x:* = serializeAndReload(d); // <<< x is an instance of Object 
    trace(x['[object Object]']); // <<< traces '42' 
} 

ответ

0

Вы можете быть над мышлением. Я использую Object вместо словаря, и он автоматически кодируется с использованием AMF. Я все время использую pyamf для прохождения объектов/dicts и всегда работал без каких-либо умственных усилий с моей стороны. Никогда не нужно было вручную сериализовать/десериализовать что-нибудь

+0

Это правда, что объекты хорошо работают - но словарь класс отличается от объекта. Объекты могут содержать только строки как ключи, а словари могут иметь любой объект. –

0

Ключи в Dictionary также должны быть сериализуемыми.

[RemoteClass(alias="Foo")] 
public class Foo 
{ 
} 

Тест:

var d:Dictionary = new Dictionary(); 
var f:Foo = new Foo(); 
d[f] = "Hello"; 
var ba:ByteArray = new ByteArray(); 
ba.writeObject(d); 
ba.position = 0; 
var d2:Dictionary = Dictionary(ba.readObject()); 
for (var key:* in d2) 
{ 
    trace(getQualifiedClassName(key)); 
    trace(d2[key]); 
} 

Выход:

Foo 
Hello 
+1

uuhh ... Я не уверен, где вы это протестировали, но когда я запускаю его, строка 'var d2: Dictioanry = ...' вызывает 'TypeError', потому что' ba.readObject() 'возвращает' Object', а не «Словарь». –

 Смежные вопросы

  • Нет связанных вопросов^_^