Esta es la solución al problema que no me dejaba dormir estas semanas.
Se trata de gestionar las versiones de código durante la deserialización de una instancia de una clase guardada en versión anterior.
La solución és super elegante y muy instructiva. El uso de namespaces permite de implementar una sorta de override de método de parseo. Yessssssss!
Gracias Greg Jastrab! gracias O’ Reilly! gracias Marc por comprarme el libro!!!
[as]
public class WeatherData implements IExternalizable {
namespace wd1_0 = “WD1.0″;
namespace wd1_1 = “WD1.1″;
protected var version:String;
public var date:Date;
public var low:Number;
public var high:Number;
public function WeatherData() {
version = “WD1.1″;
date = new Date();
low = high = 0;
}
public function readExternal(input:IDataInput):void {
version = input.readUTF();
var ns:Namespace = new Namespace(version);
ns::parse(input);
}
public function writeExternal(output:IDataOutput):void {
output.writeUTF(version);
output.writeObject(date);
output.writeFloat(low);
output.writeFloat(high);
}
wd1_0 function parse(input:IDataInput):void {
date = input.readObject() as Date;
high = input.readFloat();
}
wd1_1 function parse(input:IDataInput):void {
date = input.readObject() as Date;
low = input.readFloat();
high = input.readFloat();
}
}
[/as]
Tags: ByteArray, IExternalizable, Namespace
This entry was posted on Tuesday, February 24th, 2009 at 10:27 am
You can follow any responses to this entry through the RSS 2.0 feed.

Xing
LinkedIn
Twitter
Delicious
Facebook