Jas*_*ell 3 apache-flex flash serialization shared-objects
我在我的Flex项目中有一个名为HashMap的便捷集合类,它本质上是flash.utils.Dictionary的包装器,带有一堆便捷方法和一个添加的(同步的)ArrayCollection,这样我就可以将HashMap传递给想要的可绑定控件了一个ArrayCollection.一切正常.
什么是不行的,我刚才发现,将HashMap放在本地的SharedObject中.
注册该类会导致它被存储并以正确的类型返回,并且ArrayCollection成员返回正常,但是Dictionary不存储其数据.
这是一个片段:
[RemoteClass(alias="com.tamedtornado.collections.HashMap")]
public class HashMap extends Proxy
{
public var hash:Dictionary = new Dictionary();
// Keeps an array collection as well so we can give this to a data bound control
[Bindable]
public var collection:ArrayCollection = new ArrayCollection();
Run Code Online (Sandbox Code Playgroud)
这就是相关的东西.让字典正确存储的过程是什么?我实际上必须使ArrayCollection瞬态,就像现在每次刷新SO时,我得到另一个(在Dictionary中唯一键入)数据的副本.
Jas*_*ell 10
我更多地修改了这个,并且尝试让序列化"正常工作"得到了很多愚蠢的结果,所以我最终实现了IExternalizable接口,并修复了它.
public function readExternal(input:IDataInput):void
{
var hashCount:int = input.readInt();
for (var i:int = 0;i<hashCount;i++)
{
var prop:Object = input.readObject();
var val:Object = input.readObject();
putEntry(prop,val);
}
}
public function writeExternal(output:IDataOutput):void
{
output.writeInt(collection.length);
for (var prop:Object in hash)
{
output.writeObject(prop);
output.writeObject(hash[prop]);
}
}
Run Code Online (Sandbox Code Playgroud)
一切都被存储并且正确输入.存储的对象必须是本机类(如String),或者具有[RemoteClass]元数据标记/ registerClassAlias()调用.但除此之外,它有效.