我正在创建一个这样的对象:
var myObj:Object = new Object();
myObj["someProperty"] = {
anotherProperty: "someValue",
whateverProperty: "anotherValue"
}
现在我想将它发送到网络服务器(rails):
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并自行序列化吗?顺便说一句,序列化然后传递字符串不起作用,webserver接收空请求作为GET。
但我有点想使用httpservice类......
答案 0 :(得分:1)
我强烈建议使用Mike Chamber's JSON serialization library在JSON中编码/解码(序列化)数据。
基本上,您需要将对象转换为JSON表示。 JSONEncoder class对此非常有用。
有一个useful (old but still very relevant for using HTTPService + JSON) tutorial可以通过它,但基本上你应该在你的“someProperty”值上调用JSON.encode()。
即:
var dataString:String = JSON.encode(dataValue);
dataString = escape(dataString);
myObj["someProperty"] = dataString;
答案 1 :(得分:1)
您可以将SerializationFilter与HTTPService一起使用,将您作为对象传递的数据正确序列化为HTTPService.send()
。
这种方法的工作方式是创建自定义SerializationFilter以执行所需的特定操作。在您的情况下,您希望将传出的主体Object转换为JSON格式的String。为此,您应该覆盖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);
}
}
}
您可以在调用send()
之前将此过滤器的实例分配给HTTPService:
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实例执行的所有操作调用此过滤器。您还可以向自定义过滤器添加更多覆盖方法,以处理传入的响应。