小编典典

[ScriptMethod(ResponseFormat = ResponseFormat.Json)]

ajax

如果未指定以上内容,则在ASP.net Web服务中,默认的响应格式是什么?另外,如果我的网络服务如下:

[WebMethod()]
        public List<Sample> GenerateSamples(string[][] data)
        {
            ResultsFactory f = new ResultsFactory(data);

            List<Sample> samples = f.GenerateSamples();
            return samples;
        }

返回对象列表,如果我将响应格式更改为JSON,则必须将返回类型更改为字符串,那么如何在JavaScript中访问对象?

目前,我在JS中将此网络服务称为:

 $.ajax({
    type: "POST",
    url: "http://localhost/TemplateWebService/Service.asmx/GenerateSamples",
        data: jsonText,

        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) {
            var samples = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d;

            if (samples.length > 0) {
                doSomethingHere(samples);
            } else {
                alert("No samples have been generated");
            }



        },

        error: function(xhr, status, error) {
            var msg = JSON.parse(xhr.responseText);
            alert(msg.Message);
        }

    });

我注意到的是,即使一切正常,eval语句也永远不会执行,这意味着Web服务始终返回字符串!

所以我的问题是,在Web服务定义端是否需要[ScriptMethod(ResponseFormat = ResponseFormat.Json)]?

现在的样子是,我可以像通常在任何OOP代码中一样使用samples数组并访问每个对象及其属性,这非常方便,并且一切正常,但我只是想确保自己不会丢失我设置中的任何内容。

我从Encosia方面学习了将Jquery的ajax与asp.net结合在一起的基础知识,那里没有提到响应类型-
我在另一个站点上阅读了它,我不确定它是否至关重要。

http://www.codeproject.com/KB/webservices/JsonWebServiceJQuery.aspx

列出asp.net
Web服务端的4种不同的更改。我的web.config中只有前2个。服务本身和Sample类无需任何序列化即可实现,但是它确实具有属性。我猜默认情况下Web服务是JSON?而且,只要您的对象具有属性,它们默认即可序列化?在阅读本文之前,这就是我的理解。


阅读 625

收藏
2020-07-26

共1个答案

小编典典

ResponseFormat属性不是必需的。包括客户端和服务器设置,只需四件事即可:

  • 在您的web.config中添加ScriptHandlerFactory HttpHandler。
  • 使用[ScriptService]属性装饰您的Web服务。
  • 使用POST动词请求服务的方法。
  • 请求内容类型为“ application / json”的服务方法。

当您完成这四件事时,服务方法的响应将自动序列化为JSON。

2020-07-26