转自: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类的具体用法:
- package {
- import com.adobe.serialization.json.JSON;
- import flash.display.Sprite;
- import flash.utils.describeType;
- public class CorelibEx extends Sprite
- {
- public function CorelibEx() {
- jsonTest();
- }
- private function jsonTest():void {
- var person:Person = new Person("Joseph", 23, "Male");
- var jsonStr:String = JSON.encode(person);//普通对象转换成JSON字符串格式
- trace("jsonStr = " + jsonStr);//输出jsonStr = {"age":23,"sex":"Male","name":"Joseph"}
- var jsonObj:* = JSON.decode(jsonStr);//JSON字符串转化为AS对象
- trace("Name: " + jsonObj.name, "Age: " + jsonObj.age, "Sex: " + jsonObj.sex);
- trace(describeType(person));
- }
- }
- }
- class Person {
- private var _name:String;
- private var _age:int;
- private var _sex:String;
- public function Person(name:String=null, age:int=-1, sex:String=null) {
- _name = name;
- _age = age;
- _sex = sex;
- }
- public function get name():String {
- return _name;
- }
- public function set name(name:String):void {
- _name = name;
- }
- public function get age():int {
- return _age;
- }
- public function set age(age:int):void {
- _age = age;
- }
- public function get sex():String {
- return _sex;
- }
- public function set sex(sex:String):void {
- _sex = sex;
- }
- }
实践过程中发现,如果改对象是自定义对象,则一定要给对象的属性加上getter 和 setter 方法,否则转换得到的JSON字符串则为:{}。
通过查看corelib中JSON类的源代码,发现JSON类在encode操作时,调用的是JSONEncoder类,该类首先会判断对象所属的类型,当发现对象为自定义类型(归入Object类型)时,调用objectToString方法,顾名思义,该方法将对象转换成字符串。该方法首先会调用flash.util.descriptType方法,这个方法是将一个AS对象用XML的方法来描述,例如,对象person的XML描述是:
- <type name="CorelibEx.as$0::Person" base="Object" isDynamic="false" isFinal="false" isStatic="false">
- <extendsClass type="Object"/>
- <constructor>
- <parameter index="1" type="String" optional="true"/>
- <parameter index="2" type="int" optional="true"/>
- <parameter index="3" type="String" optional="true"/>
- </constructor>
- <accessor name="sex" access="readwrite" type="String" declaredBy="CorelibEx.as$0::Person"/>
- <accessor name="name" access="readwrite" type="String" declaredBy="CorelibEx.as$0::Person"/>
- <accessor name="age" access="readwrite" type="int" declaredBy="CorelibEx.as$0::Person"/>
- </type>
XML的根节点描述了该类的名称、基类、是否动态类、是否Final类、是否Static类,<constructor>块描述的是构造函数的内容,而<accessor>块则对应getter与setter方法。
再看回objectToString方法,从下面一段代码得知,将JSONEncoder将AS对象转换成字符串时,处理的方法是读取对象的XML描述中的<accessor>块里面的内容,因此如果AS对象没有定义getter和setter方法,对象的XML描述中就不存在<accessor>,因此转换得到的JSON格式的字符串就为{}了。
- for each ( var v:XML in classInfo..*.( name() == "variable" || name() == "accessor" ) )
- {
- // When the length is 0 we're adding the first item so
- // no comma is necessary
- if ( s.length > 0 ) {
- // We've already added an item, so add the comma separator
- s += ","
- }
- s += escapeString( v.@name.toString() ) + ":"
- + convertToString( o[ v.@name ] );
- }