0

我正在尝试对flash.geom.Rectange对象进行 JSON 编码和解码。当我解码对象时,它的类型是Object. 如果我尝试将其强制转换为Rectangle,我会得到一个空对象:

var rect:Rectangle = JSON.decode(json_string) as Rectangle;

看起来我无法从具有与矩形完全相同的属性的对象转换为矩形。

一个选项是将属性从对象复制到矩形。

然而,我正在研究对象的自省,遍历对象的属性只会深入一层。如果正在复制的 a 属性是 type PointPoint则不会复制 的属性。看起来我必须递归地复制它们。

actionscript 中是否有可以深度复制对象的函数?

4

2 回答 2

4

简短的回答 - 不。您必须将解码的 JSON 对象的组件传递到一个新的 Rectangle 中。

var jRect:Object = JSON.decode(json_string);
var rect:Rectangle = new Rectangle(jRect.x, jRect.y, jRect.width, jRect.height);

在这种情况下,您很幸运,因为您提到的点是从构造函数值推断出来的。对于更复杂的类,我通常使用 fromJSON 方法创建一个类级别。

于 2013-06-18T00:12:30.367 回答
0

这是我想出的复制功能。使用像 Rectangle 这样的简单类型对其进行了测试。那里有一个 try/catch 语句,因为当我尝试写入只读属性时遇到异常。应该有一个 if 语句来检查属性是否可写,但我现在没有时间或耐心。我稍后会回来改进它,但现在它是:

public static function copy(source:Object, dest:Object):void
{
    for (var prop in source)
    {
        if (getQualifiedClassName(source[prop]) == "Object")
        {
            copy(source[prop], dest[prop]);
        }
        else
        {
            try // bad. should really be an if statement to check if property is writable. 
            {
                dest[prop] = source[prop];
            }
            catch (err:Error)   {}
        }
    }       
}
于 2013-06-18T02:39:09.697 回答