如何让一个ASMX文件输出JSON

我创build了一个代码隐藏文件的ASMX文件。 它工作正常,但它正在输出XML。

不过,我需要它输出JSON。 ResponseFormatconfiguration似乎不起作用。 我的代码是:

[System.Web.Script.Services.ScriptService] public class _default : System.Web.Services.WebService { [WebMethod] [ScriptMethod(UseHttpGet = true,ResponseFormat = ResponseFormat.Json)] public string[] UserDetails() { return new string[] { "abc", "def" }; } } 

即使ResponseFormat设置为JSON,WebService也会返回XML :

确保请求是POST请求,而不是GET。 Scott Guthrie有一个解释原因的post 。

虽然它是专门为jQuery编写的,但这对您也可能有用:
使用jQuery来使用ASP.NET JSON Web服务

要接收纯JSONstring,而不将其封装到XML中,则必须将JSONstring直接写入HttpResponse ,并将WebMethod返回types更改为void

  [System.Web.Script.Services.ScriptService] public class WebServiceClass : System.Web.Services.WebService { [WebMethod] public void WebMethodName() { HttpContext.Current.Response.Write("{property: value}"); } } 

这可能是现在的老消息,但是这个魔法似乎是:

  • Web服务类上的[ScriptService]属性
  • [ScriptMethod(UseHttpGet = true,ResponseFormat = ResponseFormat.Json)]方法
  • 内容types:请求中的application / json

有了这些部分,GET请求就成功了

我学习了一个很难的方法(基本上在Google上花了4个小时),可以在ASPX文件中使用PageMethods来返回JSON(使用[ScriptMethod()]标记),但是如果您决定移动你的静态方法到一个asmx文件,它不能是一个静态的方法。

另外,你需要告诉Web服务Content-Type:application / json,以便从调用中获取JSON(我使用jQuery和使用jQuery时要避免的三个错误文章非常有启发性 – 它来自同一个网站在这里另一个答案中提到)。

你是从客户端脚本还是在服务器端调用Web服务?

您可能会发现发送一个内容types头到服务器将有所帮助,例如

“应用程序/ JSON; 字符集= UTF-8'

在客户端,我使用原型客户端库,并且在进行Ajax调用时有一个contentType参数,您可以指定它。 我认为jQuery有一个getJSON方法。

另外:使用通用的HTTP处理程序(.ashx),并使用您最喜欢的json库手动序列化和反序列化您的JSON。

我发现完全控制请求的处理和生成响应,胜过.NET为简单的,REST风格的Web服务提供的任何东西。

 application/json; charset=utf-8 

在IIS中使用远程web服务时不起作用 – 我不确定apache是​​否允许这样做。