我编写了一个[WebMethod],它返回一个存储序列化对象的字符串
[WebMethod]
public string doStuffs() {
...
return JavaScriptConvert.SerializeObject(myObj);
// JSON Serializer library is JSON.NET 1.3.1, for MONO
}
当我用JQuery中的$ .post调用该方法时:
$.ajax({
type: "POST",
url: "/web/doStuffs",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
// Do stuffs
}
});
问题在于回应。这就是我得到的:
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://localhost:8080/papi">{
"field1" : "value1", "field2 : "value2", etc etc}</string>
为什么JSON响应已封装在XML中?我可以从HTTP Response头看到(错误地?)设置为:
Content-Type text/xml; charset=utf-8
如何切换响应内容类型?感谢。
答案 0 :(得分:1)
如果我这样做:
$.post(
"/web/doStuffs",
{ username: $("#username").val() },
function(data){
var obj = $(data).children();
},
"xml"
);
我将在var obj中使用JSON,以便用JS解析。这应该很好。
答案 1 :(得分:1)
Mono是否支持DataContractJsonSerializer?
更新:it would appear so,但也许有错误?
答案 2 :(得分:1)
AFAIK WebMethods返回由ASP.NET自动序列化的对象。默认的序列化程序是SOAP,因为它曾经是Web服务的预期格式。
但是,System.Web.Extensions中的ASP.NET AJAX具有使用JSON序列化程序的替换处理程序。有关如何注册,请参阅http://vampirebasic.blogspot.com/2009/04/aspnet-ajax-in-mono.html。