1

我写了一个 [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 响应标头中看到(错误地?)设置为:

Content-Type text/xml; charset=utf-8

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

4

3 回答 3

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了解如何注册它。

于 2009-07-02T02:52:04.387 回答
1

如果我做:

$.post(
    "/web/doStuffs",
    { username: $("#username").val() },
    function(data){
      var obj = $(data).children();
    },           
    "xml"
);

我将在 var obj 中准备好 JSON,以便用 JS 进行解析。这应该运作良好。

于 2009-04-26T12:04:16.670 回答
1

Mono 是否支持DataContractJsonSerializer

更新:看起来是这样,但也许有错误?

于 2009-05-20T12:08:33.607 回答