1
0
Fork 0

Added serialization of arrays of Serializable

This commit is contained in:
Michaël Lemaire 2015-03-02 01:00:00 +01:00
parent fd9bdfffdd
commit 466193f88f
3 changed files with 25 additions and 1 deletions

View file

@ -58,6 +58,15 @@ module SpaceTac.Game {
var field_value = obj[field_name];
if (field_value instanceof Serializable) {
fields[field_name] = this.toData(field_value);
} else if (Array.isArray(field_value) && field_value.length > 0 && field_value[0] instanceof Serializable) {
var items: Serializable[] = [];
field_value.forEach((item: any) => {
items.push(this.toData(item));
});
fields[field_name] = {
_s: "a",
items: items
};
} else {
fields[field_name] = field_value;
}
@ -65,6 +74,7 @@ module SpaceTac.Game {
}
var data = {
_s: "o",
path: this.getClassPath(obj),
fields: fields
};
@ -77,8 +87,14 @@ module SpaceTac.Game {
for (var field_name in data.fields) {
if (data.fields.hasOwnProperty(field_name)) {
var field_value = data.fields[field_name];
if (typeof field_value === "object" && field_value.hasOwnProperty("path")) {
if (typeof field_value === "object" && field_value._s === "o") {
obj[field_name] = this.fromData(field_value);
} else if (typeof field_value === "object" && field_value._s === "a") {
var items: Serializable[] = [];
field_value.items.forEach((item: any) => {
items.push(this.fromData(item));
});
obj[field_name] = items;
} else {
obj[field_name] = field_value;
}

View file

@ -22,10 +22,13 @@ module SpaceTac.Game.Specs {
b: SerializableTestObj2;
c: SerializableTestObj2[];
constructor(a: number = 5, b: SerializableTestObj2 = null) {
super();
this.a = a;
this.b = b;
this.c = [];
}
}
@ -59,11 +62,15 @@ module SpaceTac.Game.Specs {
it("serializes and deserializes nested typescript objects", () => {
var serializer = new Serializer();
var obj = new SerializableTestObj1(8, new SerializableTestObj2("test"));
obj.c.push(new SerializableTestObj2("second test"));
obj.c.push(new SerializableTestObj2("third test"));
var dumped = serializer.serialize(obj);
var loaded = serializer.unserialize(dumped);
expect(loaded).toEqual(obj);
expect((<SerializableTestObj1>loaded).b.prepend("this is a ")).toEqual("this is a test");
expect((<SerializableTestObj1>loaded).c[1].prepend("this is a ")).toEqual("this is a third test");
});
});
}

View file

@ -1,4 +1,5 @@
/// <reference path="../../definitions/jasmine.d.ts"/>
/// <reference path="../battle/BattleView.ts"/>
module SpaceTac.View.Specs {
"use strict";