程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Flex反射得到屬性和屬性的值

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

編輯:關於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標簽,代碼如下

/** 生成傳入對象屬性和值對應的json對象,對象中綁定的屬性獲取不到,返回的json帶{},對象為null,返回"" */
02. public static function getOneJsonObject(obj:Object):String
03. {
04. if(obj == null)
05. {
06. return "";
07. }
08. var jsonInfo:String = "{";
09. // 反射出傳入對象的屬性
10. var properties:XMLList = describeType(obj).variable;
11. for each(var propertyInfo:XML in properties)
12. {
13. var propertyName:String = propertyInfo.@name;
14. jsonInfo += "\"" + propertyName + "\":\"" + obj[propertyName] + "\",";
15.
16. }
17. jsonInfo = jsonInfo.substring(0, jsonInfo.length - 1);
18. jsonInfo += "}"
19. return jsonInfo;
20. }
經過實驗,describeType不能獲取[Bindable]的屬性,這樣就可以生成一個傳入對象的json字符串了。如果想要得到類其它信息,就更換variable標簽即可,對這個方法的使用詳見官方API。

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved