gpt4 book ai didi

apache-flex - 类型转换反序列化 JSON 的最佳方法

转载 作者:行者123 更新时间:2023-12-04 06:57:26 26 4
gpt4 key购买 nike

我想我已经在 as3corelib JSON.decode 中确定了,我别无选择,只能反序列化为一个普通的旧 flex 对象。

var data:Object = JSON.decode(json);

如果然后我想将对象中包含的数据转换为另一种类型,我不能使用类型转换。我必须实例化一个新实例并手动添加属性。
var data:Object = JSON.decode(json);
var model:Model = new Model();
model.name = data.name;
model.notes = data.notes;

一个痛苦,有点难看,但我猜这是从无类型 json 到 flex 类型要付出的代价。我的第一个问题是我的假设是否正确,是否没有更漂亮的方法来使用 json 中包含的数据创建我的模型实例?

我的第二个问题,如果是这样,那么在我编写自己的方法来执行此操作之前,flex api 中是否有任何东西将获取数据对象并将其值混合到我的模型实例中?

干杯,

克里斯

最佳答案

我一直使用的方法被证明是 ActionScript 中 AMF3 序列化机制的一部分。

看看 IExternalizable registerClassAlias .

现在我使用的是以下内容:

interface ISerializable {
public function getRawData():Object;
public function setRawData(param:Object):void;
}
function registerType(id:String, type:Class):void {
//implementation
}
function getTypeByID(id:String):Class {
//implementation
}
function getTypeID(type:Class):String {
//implementation
}

并向解码器/编码器注册一个类别名。

对象的序列化工作如下:
var raw:Object = model.getRawData();
raw[" type"] = getTypeID(model);
var encoded:String = JSON.encode(raw);

解码工作如下:
var raw:Object = JSON.decode(raw);
var cl:Class = getTypeByID(raw[" type"]);
if (cl == null) throw new Error("no class registered for type: "+raw[" type"]);
delete raw[" type"];
var model:ISerializable = new cl();
model.setRawData(raw);

您需要在整个反序列化的 JSON 树上递归执行此操作,从叶子开始。
对于循环引用,您需要一个技巧。
我在某处有一个实现,但我找不到它。

关于apache-flex - 类型转换反序列化 JSON 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2385947/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com