加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 03:59:37 所属栏目:百科 来源:网络整理
导读:? ?今天要写一个生成json的方法,目的是将VO对象中的所有公共属性和值转换成一个json对象,这个类中20多个属性,手动拼的话,是个体力活,并且有其它的对象也要转成json,还要手动拼,脑袋里最先想到的就是反射。 ? ? ? ?我们知道,在java中,通过反射可以得

? ?今天要写一个生成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 属性的访问权限。可能的值包括?readonlywriteonly?和?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标签,代码如下:

   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。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读