Mono2.0.1中的Web方法响应格式

时间:2009-04-26 09:08:19

标签: web-services json mono asmx

我编写了一个[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

如何切换响应内容类型?感谢。

3 个答案:

答案 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