前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flex反射得到属性和属性的值

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

作者头像
高爽
发布2022-05-07 15:29:38
1.6K0
发布2022-05-07 15:29:38
举报
文章被收录于专栏:高爽的专栏高爽的专栏

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

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

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

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

标签

属性

说明

<type>

XML 对象的根标签。

name

ActionScript 对象的数据类型的名称。

base

ActionScript 对象的定义类的直接超类。如果 ActionScript 对象是类对象,则值为 Class。

isDynamic

如果 ActionScript 对象的定义类是动态的,则为 true;否则为 false。如果 ActionScript 对象是类对象,则值为 true,因为 Class 类是动态的。

isFinal

如果 ActionScript 对象的定义类是最终类,则为 true;否则为 false。

isStatic

如果 ActionScript 对象是类对象或构造函数,则为 true;否则为 false。此属性之所以名为 isStatic,原因是:如果此属性为 true,则未嵌套在 factory 标记内的任何标签都是静态的。

<extendsClass>

ActionScript 对象的定义类的每个超类都有一个单独的 extendsClass 标签。

type

ActionScript 对象的定义类扩展的超类的名称。

<implementsInterface>

ActionScript 对象的定义类或其任何超类实现的每个接口都有一个单独的 implementsInterface 标签。

type

ActionScript 对象的定义类实现的接口的名称。

<accessor>

存取器是 getter 和 setter 函数定义的一个属性。

name

存取器的名称。

access

属性的访问权限。可能的值包括 readonly、writeonly 和 readwrite。

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 ?

代码语言:javascript
复制
 /** 生成传入对象属性和值对应的json对象,对象中绑定的属性获取不到,返回的json带{},对象为null,返回"" */ 
  public static function getOneJsonObject(obj:Object):String  
         {  
  if(obj == null)  
             {  
  return "";  
             }  
  var jsonInfo:String = "{";  
  // 反射出传入对象的属性 
  var properties:XMLList = describeType(obj).variable;  
  for each(var propertyInfo:XML in properties)  
             {  
  var propertyName:String = propertyInfo.@name;  
                 jsonInfo += "\"" + propertyName + "\":\"" + obj[propertyName] + "\",";  
  
             }  
             jsonInfo = jsonInfo.substring(0, jsonInfo.length - 1);  
             jsonInfo += "}" 
  return jsonInfo;  
         }  

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2012-03-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档