as3corelib:Adobe官方出品的ActionScript 3 函数库

转自:http://blog.csdn.net/meteorlwj/article/details/5315221

as3corelib是Adobe官方出品的ActionScript 3 函数库,这个库包括了MD5、SHA1、SHA224、SHA256加密,PNG、JPG编码,JSON序列化等强大功能。

详细类库如下:
com.adobe.air.logging 
com.adobe.crypto 
com.adobe.errors 
com.adobe.fileformats.vcard 
com.adobe.images 
com.adobe.net 
com.adobe.net.proxies 
com.adobe.protocols.dict 
com.adobe.protocols.dict.events 
com.adobe.protocols.dict.util 
com.adobe.serialization.json 
com.adobe.utils 
com.adobe.webapis 
com.adobe.webapis.events 
参考:


下载as3corelib 函数库(http://code.google.com/p/as3corelib/downloads/list)

API CHM:as3corelib.CHM(http://dmh2002.com/upload/as3corelib.CHM)

 

文章来自: :http://www.flashas.net/asbc/20090716/4288.html


as3corelib的JSON类的简单应用

 as3corelib是一个开源的as库,里面有很多有用的工具类,其中里面的JSON类可以将AS的对象转换成JSON的格式。

 

        JSON类只有两个静态方法: encode 和 decode。

 

        encode方法接受一个AS对象作为参数,然后把对象转换成JSON格式的字符串;decode方法接受一个JSON格式
的字符串,返回一个AS对象。下面是JSON类的具体用法:

Js代码   收藏代码
  1. package {  
  2.   
  3.     import com.adobe.serialization.json.JSON;  
  4.   
  5.       
  6.   
  7.     import flash.display.Sprite;  
  8.   
  9.     import flash.utils.describeType;  
  10.   
  11.   
  12.   
  13.     public class CorelibEx extends Sprite  
  14.   
  15.     {  
  16.   
  17.         public function CorelibEx() {  
  18.   
  19.             jsonTest();  
  20.   
  21.         }  
  22.   
  23.           
  24.   
  25.         private function jsonTest():void {  
  26.   
  27.             var person:Person = new Person("Joseph", 23, "Male");  
  28.   
  29.             var jsonStr:String = JSON.encode(person);//普通对象转换成JSON字符串格式  
  30.   
  31.             trace("jsonStr = " + jsonStr);//输出jsonStr = {"age":23,"sex":"Male","name":"Joseph"}  
  32.   
  33.               
  34.   
  35.             var jsonObj:* = JSON.decode(jsonStr);//JSON字符串转化为AS对象  
  36.   
  37.             trace("Name: " + jsonObj.name, "Age: " + jsonObj.age, "Sex: " + jsonObj.sex);  
  38.   
  39.               
  40.   
  41.             trace(describeType(person));  
  42.   
  43.         }  
  44.   
  45.     }  
  46.   
  47. }  
  48.   
  49.   
  50.   
  51. class Person {  
  52.   
  53.     private var _name:String;  
  54.   
  55.     private var _age:int;  
  56.   
  57.     private var _sex:String;  
  58.   
  59.       
  60.   
  61.     public function Person(name:String=null, age:int=-1, sex:String=null) {  
  62.   
  63.         _name = name;  
  64.   
  65.         _age = age;  
  66.   
  67.         _sex = sex;  
  68.   
  69.     }  
  70.   
  71.       
  72.   
  73.     public function get name():String {  
  74.   
  75.         return _name;  
  76.   
  77.     }  
  78.   
  79.       
  80.   
  81.     public function set name(name:String):void {  
  82.   
  83.         _name = name;  
  84.   
  85.     }  
  86.   
  87.       
  88.   
  89.     public function get age():int {  
  90.   
  91.         return _age;  
  92.   
  93.     }  
  94.   
  95.       
  96.   
  97.     public function set age(age:int):void {  
  98.   
  99.         _age = age;  
  100.   
  101.     }  
  102.   
  103.       
  104.   
  105.     public function get sex():String {  
  106.   
  107.         return _sex;  
  108.   
  109.     }  
  110.   
  111.       
  112.   
  113.     public function set sex(sex:String):void {  
  114.   
  115.         _sex = sex;  
  116.   
  117.     }   
  118.   
  119. }  
 

        实践过程中发现,如果改对象是自定义对象,则一定要给对象的属性加上getter 和 setter 方法,否则转换得到的JSON字符串则为:{}。

 

        通过查看corelib中JSON类的源代码,发现JSON类在encode操作时,调用的是JSONEncoder类,该类首先会判断对象所属的类型,当发现对象为自定义类型(归入Object类型)时,调用objectToString方法,顾名思义,该方法将对象转换成字符串。该方法首先会调用flash.util.descriptType方法,这个方法是将一个AS对象用XML的方法来描述,例如,对象person的XML描述是:

Xml代码   收藏代码
  1. <type name="CorelibEx.as$0::Person" base="Object" isDynamic="false" isFinal="false" isStatic="false">  
  2.   <extendsClass type="Object"/>  
  3.   <constructor>  
  4.     <parameter index="1" type="String" optional="true"/>  
  5.     <parameter index="2" type="int" optional="true"/>  
  6.     <parameter index="3" type="String" optional="true"/>  
  7.   </constructor>  
  8.   <accessor name="sex" access="readwrite" type="String" declaredBy="CorelibEx.as$0::Person"/>  
  9.   <accessor name="name" access="readwrite" type="String" declaredBy="CorelibEx.as$0::Person"/>  
  10.   <accessor name="age" access="readwrite" type="int" declaredBy="CorelibEx.as$0::Person"/>  
  11. </type>  

        XML的根节点描述了该类的名称、基类、是否动态类、是否Final类、是否Static类,<constructor>块描述的是构造函数的内容,而<accessor>块则对应getter与setter方法。

 

        再看回objectToString方法,从下面一段代码得知,将JSONEncoder将AS对象转换成字符串时,处理的方法是读取对象的XML描述中的<accessor>块里面的内容,因此如果AS对象没有定义getter和setter方法,对象的XML描述中就不存在<accessor>,因此转换得到的JSON格式的字符串就为{}了。

Js代码   收藏代码
  1. for each ( var v:XML in classInfo..*.( name() == "variable" || name() == "accessor" ) )  
  2.   
  3. {  
  4.   
  5.     // When the length is 0 we're adding the first item so  
  6.   
  7.     // no comma is necessary  
  8.   
  9.     if ( s.length > 0 ) {  
  10.   
  11.         // We've already added an item, so add the comma separator  
  12.   
  13.         s += ","  
  14.   
  15.     }  
  16.   
  17.                       
  18.   
  19.     s += escapeString( v.@name.toString() ) + ":"   
  20.   
  21.             + convertToString( o[ v.@name ] );  
  22.   
  23. }  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值