如何让一个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是否允许这样做。