类型 AS3 JSON 编码器和解码器?

2023-11-30

我需要以类型化的方式编码和解码 AS3 对象。http://code.google.com/p/as3corelib/仅支持无类型编码和解码。http://code.google.com/p/ason/支持某种类型的对象,但不是很健壮,例如它在日期对象上失败。有什么建议吗?

明确地说:它必须是 JSON,并且必须是强类型且健壮的。


JSON 是 AS3 中内置的。通过线路传输数据的首选方法是 AMF,它确实为您提供类型化对象。

如果你必须使用 JSON,那么我猜你可能需要使用某种自定义协议能够使用类型进行编码/解码。

您实际上需要一个反射实用程序来读取 JSON 格式的 bean,然后生成您的对象。这实际上取决于你想走多深。

as3Commons 有一个反射包可以提供帮助。他们还有一个 JSONTypeProvider,这并不完全是您所需要的,但可以让您处于正确的位置。

您可以修改任何 IOC 框架,通过解析 JSON 而不是大多数使用的常规 XML 来生成上下文。

您可以修改 ASON 并添加自定义类型解析器。您必须在 JSON 对象中发送一个包含对象类型的变量。并将其与flash.utils.getDefinitionByName.

另一种方法是使用常规 JSON 解析器解析对象,然后如果它具有定义的类型,则创建该对象的实例,并初始化属性。

像这样,让你开始:

var beanInfo:Object = JSON.decode( jsonString );
beanInfo = _parseBean( beanInfo );

private function _parseBean(beanInfo:Object):Object{
    if ( beanInfo.hasOwnProperty("_type") ) {
        var clazz:Class = getDefinitionByName( beanInfo._type ) as Class;
        beanInfo.__clazz = clazz;
        var instance:Object = new clazz;
        for( var prop:String in beanInfo ) {
            if( instance.hasOwnProperty(prop) ) target[prop] = _getPropertyFrom(beanInfo[prop]);
        }
    }
}

private function _getPropertyFrom(property:String):* {
    var xml:XML = describeType( beanInfo.__clazz );
    //find the type of the current property.
    var type:String = xml...
    //if is a simple object then do something like
    switch( type ) {
        case "number":
            return parseFloat(property ) as Number;
        break;
        case "int":
        case "uint":
            return parseInt( property );
        break;
        case "string":
            return property as String;
        break;
        ...
        default
            //As it is it does not suppor complex objects.
           //You would use reflection. But then you could save the whole switch...

        break;

    }


}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

类型 AS3 JSON 编码器和解码器? 的相关文章

随机推荐