Flex 序列化自定义类 解决 sharedObject 保存自定义对象
2010-08-18 11:27
465 查看
问题
我想把自定义类实例存储到LSO
解决办法
使用flash.net.registerClassAlias( )方法保留类型信息并把类实例添加到共享对象的data属性上。
讨论
LSOs 使用特殊的二进制格式,Action Message Format (AMF),当要在LSO中存储类实例时,实例会被编码为包含属性的普通的object。这样当重新从共享对象中读取实例时,已经不是原来的类实例了,因为已不能根据类型信息解码回来。
flash.net包中的registerClassAlias( )方法就是为解决这个问题的,这个方法的使用是很简单的,在AS1.0和AS2.0中写法是Object.registerClass( ),但是在AS3.0里已经被删除了,取而代之的是flash.net.registerClassAlias( )。
registerClassAlias( )方法需要两个参数,第一个参数表示类的别名,可以用任意字符串表示别名,比如modal包中有个Person类,别名可以是modal.Person,第二个参数类引用。
-ActionScript
registerClassAlias( "somePackage.ExampleClass", ExampleClass );
这个代码的作用是把这个类的信息存进LSO,当读取数据时,Flash 播放器就知道这个object到底是什么类。
下面的例子完整实现了类实例的保存,首先创建自定义类:
-ActionScript
// Create a Person class in the model package
package model {
public class Person {
private var _firstName:String;
private var _age:int;
public function Person(firstName:String, age:int) {
_firstName = firstName;
_age = age;
}
public function toString( ):String {
return _firstName + " is " + _age + " years old";
}
}
}
接着,编写主类读取和写入数据
-ActionScript
package {
import flash.net.registerClassAlias;
import flash.net.SharedObject;
import model.Person;
public class Example {
public function Example( ) {
// Map "model.Person" to the Person class
registerClassAlias( "model.Person", Person );
// Create a shared object and store a Person instance in it
var example:SharedObject = SharedObject.getLocal( "example" );
// Test to see if the person instance has been saved already
if ( example.data.person == undefined ) {
trace( "first time, saving person instance" );
var person:Person = new Person("Darron", 24);
// Write the class instance to the local shared object
example.data.person = person;
} else {
trace( "person instance already saved, using stored values" );
}
/* Every time this code is executed, the following is displayed:
Darron is 24 years old
*/
trace( example.data.person.toString( ) );
}
这里需要注意的是registerClassAlias( )必须在SharedObject.getLocal( )方法之前调用才有效。否则的话共享对象会把Person解释为普通的object类型进行存储。
相关文章推荐
- Flex 序列化自定义类 解决 sharedObject 保存自定义对象
- Flex 序列化自定义类 解决 sharedObject 保存自定义对象
- 【已解决】iPhone/iOS中保存自定义对象(Custom Object/Custom Class)的数组(NSMutableArray/NSArray)到NSUserDefaults
- Atiitt 对象转换json 序列化规范 Java 循环引用的解决 设置序列化层次深度 去除不必的属性 太长不方便月度 jsonObject.remove("num1"); Prety fo
- Flex中SharedObject对象的使用
- SharedObject使用:在FluorineFx.net与Flex中使用共享对象维护在线用户列表实例
- FMS3系列(六):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)
- FMS3系列(六):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)
- iPhone/iOS中保存自定义对象(Custom Object/Custom Class)的数组(NSMutableArray/NSArray)到NSUserDefaults
- FMS3系列(六):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash) 推荐
- Hibernate 保存对象出现 org.hibernate.NonUniqueObjectException 及解决
- 解决保存自定义对象时实现Serializable时出现的问题
- FMS3系列(六):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)
- SharedObject使用:在FluorineFx.net与Flex中使用共享对象维护在线用户列表实例【转】
- SharedObject内置的Flex保存信息的函数
- 关于Flex与Spring整合RemoteObject调用Java方法找不到自定义通道的解决方法
- SharedObject对象保存二进制数据到本地
- FMS3系列(六):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)
- FMS3系列(六):使用远程共享对象(SharedObject)实现多人时时在线聊天(Flex | Flash)
- 利用tomcat-redis-session-manager做session同步时自定义类对象属性保存不上的解决方法