把自定义类实例存储到LSO

时间:2023-03-10 02:48:27
把自定义类实例存储到LSO

使用flash.net.registerClassAlias( )方法保留类型信息并把类实例添加到共享对象的data属性上。

LSOs 使用特殊的二进制格式,Action Message Format (AMF),当要在LSO中存储类实例时,实例会被编码为包含属性的普通的object。这样当重新从共享对象中读取实例时,已经不是原来的类实例了,因为已不能根据类型信息解码回来。

下面的例子完整实现了类实例的保存,首先创建自定义类:

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";
}
}
}

接着,编写主类读取和写入数据

package 
{
  import flash.net.registerClassAlias;
  import flash.net.SharedObject;
  import model.Person;
  public class Example
  {
    public function Example( )
    {
      registerClassAlias( "model.Person", Person );
      var example:SharedObject = SharedObject.getLocal( "example" );
      if ( example.data.person == undefined )
       {
        trace( "first time, saving person instance" );
        var person:Person = new Person("Darron", 24);
        example.data.person = person;
       } else {
        trace( "person instance already saved, using stored values" );
       }
      trace( example.data.person.toString( ) );
    }
  }
}

这里需要注意的是registerClassAlias( )必须在SharedObject.getLocal( )方法之前调用才有效。否则的话共享对象会把Person解释为普通的object类型进行存储。