Flex反射得到属性和属性的值

今天要写一个生成json的方法,目的是将VO对象中的所有公共属性和值转换成一个json对象,这个类中20多个属性,手动拼的话,是个体力活,并且有其它的对象也要转成json,还要手动拼,脑袋里最先想到的就是反射。

我们知道,在java中,通过反射可以得到一个类中的所有信息,属性、方法、接口、注解等等,那么在flex中是不是也是如此呢?

随后google之,锁定了describeType方法,这是一个flash.utils下的公共方法,通过它也可以达到java中类似的效果。

下表描述了由describeType()生成的 XML 对象的某些标签和属性(返回的所有类和接口名称均采用完全限定的格式):

标签属性说明
<type>XML 对象的根标签。
nameActionScript 对象的数据类型的名称。
baseActionScript 对象的定义类的直接超类。如果 ActionScript 对象是类对象,则值为Class
isDynamic如果 ActionScript 对象的定义类是动态的,则为true;否则为false。如果 ActionScript 对象是类对象,则值为true,因为 Class 类是动态的。
isFinal如果 ActionScript 对象的定义类是最终类,则为true;否则为false
isStatic如果 ActionScript 对象是类对象或构造函数,则为true;否则为false。此属性之所以名为isStatic,原因是:如果此属性为true,则未嵌套在factory标记内的任何标签都是静态的。
<extendsClass>ActionScript 对象的定义类的每个超类都有一个单独的extendsClass标签。
typeActionScript 对象的定义类扩展的超类的名称。
<implementsInterface>ActionScript 对象的定义类或其任何超类实现的每个接口都有一个单独的implementsInterface标签。
typeActionScript 对象的定义类实现的接口的名称。
<accessor>存取器是 getter 和 setter 函数定义的一个属性。
name存取器的名称。
access属性的访问权限。可能的值包括readonlywriteonlyreadwrite
type属性的数据类型。
declaredBy包含关联的 getter 或 setter 函数的类。
<constant>常量是用const语句定义的一个属性。
name常量的名称。
type常量的数据类型。
<method>方法是作为类定义的一部分声明的函数。
name方法的名称。
declaredBy包含方法定义的类。
returnType方法的返回值的数据类型。
<parameter>方法定义的每个参数都有一个单独的parameter标签。此标签始终嵌套在<method>标签内。
index一个数字,对应于参数在方法的参数列表中出现的顺序。第一个参数的值为 1。
type参数的数据类型。
optional如果参数是可选参数,则为true;否则为false
<variable>变量是用var语句定义的一个属性。
name变量的名称。
type变量的数据类型。
<factory>如果 ActionScript 对象是类对象或构造函数,则所有实例属性和方法均嵌套在此标签内。如果<type>标签的isStatic属性为true,则未嵌套在<factory>标签内的所有属性和方法都是静态的。只有在 ActionScript 对象是类对象或构造函数时,此标签才会出现。
该方法有两种使用方式,第一种,传入的参数是对象,这样可以得到普通属性和方法,不能得到静态属性和方法,第二种,传入的参数是类,这样可以得到所有的属性和方法,不包括私有的。

针对我的需求,我使用第一种方式,获得它返回的variable标签,代码如下:

[javascript] view plain copy print ?
  1. /**生成传入对象属性和值对应的json对象,对象中绑定的属性获取不到,返回的json带{},对象为null,返回""*/
  2. publicstaticfunctiongetOneJsonObject(obj:Object):String
  3. {
  4. if(obj==null)
  5. {
  6. return"";
  7. }
  8. varjsonInfo:String="{";
  9. //反射出传入对象的属性
  10. varproperties:XMLList=describeType(obj).variable;
  11. foreach(varpropertyInfo:XMLinproperties)
  12. {
  13. varpropertyName:String=propertyInfo.@name;
  14. jsonInfo+="\""+propertyName+"\":\""+obj[propertyName]+"\",";
  15. }
  16. jsonInfo=jsonInfo.substring(0,jsonInfo.length-1);
  17. jsonInfo+="}"
  18. returnjsonInfo;
  19. }

经过实验,describeType不能获取[Bindable]的属性,这样就可以生成一个传入对象的json字符串了。如果想要得到类其它信息,就更variable标签即可,对这个方法的使用详见官方API。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值