【问题标题】:Flash/Flex: Is it possible to encode Dictionary using AMF?Flash/Flex:是否可以使用 AMF 对字典进行编码?
【发布时间】:2010-04-22 19:35:54
【问题描述】:

如标题所示,是否可以使用 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'
}

【问题讨论】:

    标签: apache-flex flash amf


    【解决方案1】:

    你可能想多了。我使用 Object 而不是 Dictionary,它使用 AMF 自动编码。我一直使用 pyamf 来传递 Objects/dicts 并且它总是在我没有任何脑力劳动的情况下工作。我从来不需要手动序列化/反序列化任何东西

    【讨论】:

    • Objects 确实可以很好地工作 - 但 Dictionary 类与 Object 不同。对象只能有字符串作为键,而字典可以有任何对象。
    【解决方案2】:

    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
    

    【讨论】:

    • uuhh... 我不确定你在哪里测试过这个,但是当我运行它时,var d2:Dictioanry = … 行会引发TypeError,因为ba.readObject() 返回一个Object,而不是Dictionary.
    猜你喜欢
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    相关资源
    最近更新 更多