Показать сообщение отдельно
Старый 18.08.2011, 14:03
toFL вне форума Посмотреть профиль Найти все сообщения от toFL
  № 7  
Ответить с цитированием
toFL
Banned

Регистрация: May 2011
Адрес: +48° 27' 57.93", +35° 2' 46.02"
Сообщений: 447
Записей в блоге: 2
Отправить сообщение для toFL с помощью Skype™
Если вы все таки решили использовать JSON, то ниже, накидал вам код. Здесь представлена цепочка:

Отправка: Инстансы -> JSON -> Строка
Прием: Строка -> JSON -> Инстансы

Код AS3:
package {
	import flash.display.Sprite;
 
	public class Main extends Sprite {
		private var myArray:Array = new Array();
 
		public function Main() {
			//забиваем массив
			myArray.push(new MyObject(1, [new Par(1, [0,0]), new Par(2, [0,0]), new Par(3, [0,0])]));
			myArray.push(new MyObject(2, [new Par(1, [0,0]), new Par(2, [0,0]), new Par(3, [0,0])]));
 
			var serializer:Serializer = new Serializer();
 
			//получаем строку для отправки
			var sendData:String = serializer.serialize(myArray);
 
			//получаем из строки Object
			var obj:Object = serializer.unserialize(sendData);
 
			//обнуляем наши объекты
			myArray = new Array();
 
			//парсим Object
			var i:uint = 1;
			var id:uint = 1;
			while (true) {
				if (obj.hasOwnProperty("object" + id)) {
					i = 1;
					var list:Array = new Array();
					while (true) {
						if (obj["object" + id].hasOwnProperty("par" + i)) {
							list.push(new Par(i, obj["object" + id]["par" + i].split("")));
							i++
						} else {
							id++;
							break;
						}
					}
					myArray.push(new MyObject(id, list));
				} else {
					break;
				}
			}
		}
	}
}
Сериализатор:
Код AS3:
package {
	import com.adobe.serialization.json.*;
 
	public class Serializer {
		public function Serializer() {
 
		}
		public function serialize (list:Array):String {
			var obj:Object = new Object();
			var json:JSONEncoder;
 
			for (var i:uint = 0; i < list.length; i++) {
				var myObject:MyObject = list[i] as MyObject;
				obj[myObject.getName()] = myObject.getObject();
			}
			json = new JSONEncoder(obj);
 
			return json.getString();
		}
		public function unserialize (str:String):Object {
			var obj:JSONDecoder = new JSONDecoder(str, false);
			return obj.getValue();
		}
	}
}
Код AS3:
package {
	public class MyObject {
		private var id:uint;
		private var list:Array;
 
		public function MyObject(id:uint, list:Array) {
			this.id = id;
			this.list = list;
		}
		public function getName ():String {
			return "object" + id;
		}
		public function getObject ():Object {
			var obj:Object = new Object;
			for (var i:uint = 0; i < list.length; i++) {
				var par:Par = list[i] as Par;
				obj[par.getName()] = par.getObject();
			}
			return obj;
		}
	}
}
Код AS3:
package {
	public class Par {
		private var id:uint;
		private var data:Array;
 
		public function Par(id:uint, data:Array) {
			this.id = id;
			this.data = data;
		}
		public function getName ():String {
			return "par" + id;
		}
		public function getObject ():String {
			return this.data.toString();
		}
	}
}
В идеале, лучше использовать типизированные массивы (тем более для Serializer). Так же в этом примере, в ф-циях serialize и unserialize можно использовать любой предпочитаемый вами формат обмена данными (например тот же AMF).


Последний раз редактировалось toFL; 18.08.2011 в 14:12.