HTTPService неправильно выполняет JSON-кодирование вложенных объектов в send () - PullRequest
0 голосов
/ 22 ноября 2011

Я создаю объект, подобный этому:

var myObj:Object = new Object();
myObj["someProperty"] = {
   anotherProperty: "someValue",
   whateverProperty: "anotherValue"
}

Теперь я хочу отправить его на веб-сервер (рельсы):

var service:HTTPService = new HTTPService();
service.url = "http://server.com/some/path/entry.json";
service.method = URLRequestMethod.POST;
service.send( myObj );

проблема в том, что сервер получаетJSON, как это:

{"someProperty"=>"[object Object]"}

это проблема с HTTPService?я должен использовать старый добрый загрузчик / urlrequest и сериализовать себя?Кстати, сериализация и последующая передача строки не работают, веб-сервер получает пустой запрос как GET.

, но я хочу использовать класс httpservice, хотя ...

Ответы [ 2 ]

1 голос
/ 22 ноября 2011

Вы можете использовать SerializationFilter с вашим HTTPService для правильной сериализации данных, которые вы передаете как объект HTTPService.send().

Способ, которым это работает, заключается в создании настраиваемого фильтра SerializationFilter для выполнения определенного требуемого действия. В вашем случае вы хотите преобразовать исходящий объект Object в строку формата JSON. Для этого вы должны переопределить метод serializeBody:

package
{
    import mx.rpc.http.AbstractOperation;
    import mx.rpc.http.SerializationFilter;
    import com.adobe.serialization.json.JSON;

    public class JSONSerializationFilter extends SerializationFilter
    {
        override public function serializeBody(operation:AbstractOperation, obj:Object):Object
        {
            return JSON.encode(obj);
        }
    }
}

Вы можете назначить экземпляр этого фильтра вашему HTTPService перед вызовом send():

var service:HTTPService = new HTTPService();
service.url = "http://server.com/some/path/entry.json";
service.method = URLRequestMethod.POST;
//add the serialization filter
service.serializationFilter = new JSONSerializationFilter();
service.send( myObj );

После назначения этот фильтр будет вызываться для всех операций, выполняемых этим экземпляром HTTPService. Вы также можете добавить дополнительные методы переопределения в свой пользовательский фильтр для обработки входящего ответа.

1 голос
/ 22 ноября 2011

Я настоятельно рекомендую использовать библиотеку JSON сериализации Майка Чемберса для кодирования / декодирования (сериализации) данных в JSON.

По сути, вам необходимо преобразовать ваш объект в представление JSON.Класс JSONEncoder полезен для этого.

Есть полезное (старое, но все еще очень актуальное для использования HTTPService + JSON) учебное пособие , которое проходит через него, но по сути вы должны вызвать JSON.encode () для того, что ваше значение "someProperty"is.

т.е.:

var dataString:String = JSON.encode(dataValue);
dataString = escape(dataString);
myObj["someProperty"] = dataString;
...