如何让一个ASMX文件输出JSON如何让一个ASMX文件输出JSON(How to let an A

2019-05-09 00:04发布

我创建了一个ASMX文件,隐藏文件代码。 它的工作很好,但它输出XML。

但是,我需要它输出JSON。 该ResponseFormat配置似乎并没有工作。 我的后台代码是:

[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" };
    }
}

Answer 1:

从WebService的返回XML即使ResponseFormat设置为JSON :

确保请求是POST请求,而不是GET。 斯科特格思里有一个文章,解释为什么 。

虽然它的jQuery编写的,这也可能对你有用:
使用jQuery消费ASP.NET的JSON Web服务



Answer 2:

要获得一个纯粹的JSON字符串,而不会被包裹成一个XML,你必须直接写JSON字符串到HttpResponse和更改WebMethod返回类型void

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


Answer 3:

这可能是旧闻现在,但魔术似乎是:

  • [ScriptService]上的web服务类属性
  • [ScriptMethod(UseHttpGet =真,ResponseFormat = ResponseFormat.Json)]对方法
  • 内容类型:应用/ JSON在请求

有了这些作品,GET请求是成功的。

对于HTTP POST

  • [ScriptMethod(UseHttpGet =假,ResponseFormat = ResponseFormat.Json)]对方法

并在客户端(假设你的WebMethod被调用方法名,它需要所谓的搜索字符串一个参数):

        $.ajax({
            url: "MyWebService.asmx/MethodName",
            type: "POST",
            contentType: "application/json",
            data: JSON.stringify({ searchString: q }),
            success: function (response) {                  
            },
            error: function (jqXHR, textStatus, errorThrown) {
                alert(textStatus + ": " + jqXHR.responseText);
            }
        });


Answer 4:

快速疑难杂症,我学到了艰辛的道路(主要是在谷歌花费4小时),你可以使用PageMethods在你的ASPX文件,以返回JSON(与[ScriptMethod()]标记)的静态方法,但是如果你决定移动您的静态方法的ASMX文件,它不能是一个静态方法。

此外,你需要告诉Web服务内容类型:应用程序/ JSON,以获得JSON从调用(我使用jQuery和后3个误区,以避免在使用jQuery文章是很有启发性-来自同一个网站的在另一种答案这里提到)。



Answer 5:

你打电话从客户端脚本或服务器端的Web服务?

您可能会发现发送内容类型标题到服务器会有帮助,例如,

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

在客户端,我使用的原型客户端库,并调用Ajax在那里你可以指定这个时候有一个参数的contentType。 我认为jQuery有一个方法的getJSON。



Answer 6:

另一种方法:使用通用HTTP处理程序(ashx的),并使用自己喜欢的JSON库手动序列化和反序列化JSON的。

我发现了一个请求的处理是完全控制,并生成响应击败其他任何.NET提供了简单,RESTful Web服务。



文章来源: How to let an ASMX file output JSON
标签: c# json asmx