gpt4 book ai didi

actionscript-3 - 类型化的 AS3 JSON 编码器和解码器?

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

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

明确一点:它必须是 JSON,并且必须是强类型和健壮的。

最佳答案

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

如果您必须使用 JSON,那么我猜您可能必须使用某种自定义协议(protocol) 才能使用类型进行编码/解码。

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

as3Commons 有一个 reflect 包可以提供帮助。他们还有一个 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;

}


}

关于actionscript-3 - 类型化的 AS3 JSON 编码器和解码器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5764646/

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