代码之家  ›  专栏  ›  技术社区  ›  sarsnake

[脚本方法(responseForMat=responseForMat.json)]

  •  6
  • sarsnake  · 技术社区  · 14 年前

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

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

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

    目前我在我的JS中调用这个Web服务,比如:

     $.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代码中那样使用样本数组并访问每个对象及其属性,这非常方便,并且一切正常,但我只是想确保我的设置中没有遗漏任何内容。

    我从Encosia方面学习了jQuery的Ajax和ASP.NET结合的基本知识,但没有提到响应类型——我在另一个站点上阅读了它,我不确定它有多重要。

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

    列出ASP.NET Web服务端的4个不同更改。我的web.config中只有前2个。服务本身和示例类是在没有任何序列化的情况下实现的,但它确实具有属性。我想Web服务默认是JSON?只要您的对象有属性,它们默认是可序列化的?这是我的理解,直到我读到这篇文章。

    1 回复  |  直到 14 年前
        1
  •  7
  •   Dave Ward    14 年前

    responseForMat属性不是必需的。包括客户机和服务器设置,只需要四件事:

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

    当您执行这四项操作时,服务方法的响应将自动序列化为JSON。