在ASP.net web服务中,如果没有指定上面的内容,那么默认的响应格式是什么?另外,如果我的web服务如下:
[WebMethod()]
public List<Sample> GenerateSamples(string[][] data)
{
ResultsFactory f = new ResultsFactory(data);
List<Sample> samples = f.GenerateSamples();
return samples;
}返回对象列表,如果我将响应格式更改为JSON,我必须将返回类型更改为string,那么我如何在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)是必要的吗?
现在的情况是,我可以使用samples数组,像在任何OOP代码中一样访问每个对象及其属性,这非常方便,而且一切工作都没有问题,但我只是想确保我的设置中没有遗漏任何东西。
我从Encosia端获取了将Jquery的ajax与asp.net相结合的基础知识,但这里没有提到响应类型-我在另一个网站上读到了它,我不确定它有多重要。
http://www.codeproject.com/KB/webservices/JsonWebServiceJQuery.aspx
列出了asp.net web服务端的4个不同更改。我只在我的web.config中有前2个。服务本身和示例类是在没有任何序列化的情况下实现的,但它确实具有属性。我猜默认情况下web服务是JSON?只要你的对象有属性,它们在默认情况下是可序列化的?这是我在读到这篇文章之前的理解。
发布于 2010-05-20 22:23:31
ResponseFormat属性不是必需的。包括客户端和服务器设置在内,只需执行以下四项操作:
使用带有POST动词的内容类型web.config.
请求服务的方法
当您执行这四项操作时,服务方法的响应将自动序列化为JSON。
https://stackoverflow.com/questions/2851117
复制相似问题