Flash/Flex:是否可以使用 AMF 对字典进行编码?

发布于 2024-08-29 21:31:48 字数 517 浏览 5 评论 0原文

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

As the title suggests, is it possible to use AMF to encode/decode Dictionaries (without subclassing, that is)?

For example, here's a test case:

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'
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

无人问我粥可暖 2024-09-05 21:31:48

你可能想太多了。我使用对象而不是字典,它是使用 AMF 自动编码的。我一直使用 pyamf 来传递对象/字典,并且它总是可以工作,不需要我任何脑力劳动。我从来不需要手动序列化/反序列化任何东西

You may be over-thinking. I use Object instead of Dictionary and it is automatically encoded using AMF. I use pyamf all the time to pass Objects/dicts around and its always worked without any mental effort on my part. Never have I needed to manually serialize/deserialize anything

最冷一天 2024-09-05 21:31:48

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

The keys in the Dictionary need to be serializable, too.

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

Test:

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]);
}

Output:

Foo
Hello
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文