[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
In ASP.net web service if the above isn't specified , what is the response format by default? Also, if my web service below:
[WebMethod()]
public List<Sample> GenerateSamples(string[][] data)
{
ResultsFactory f = new Resu开发者_StackOverflow社区ltsFactory(data);
List<Sample> samples = f.GenerateSamples();
return samples;
}
returns the list of objects, If I change the response format to JSON, I have to change the return type to string, then how do I access objects in my javascript?
Currently I call this web service in my JS such as:
$.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);
}
});
What i noticed though, even though everything works perfectly fine, the eval statement never gets executed, which means that the web service always returns a string!
So my question is, is [ScriptMethod(ResponseFormat = ResponseFormat.Json)] necessary on the web service definition side?
The way things are now, I can use samples array and access each object and its properties as I normally would in any OOP code, which is very convenient, and everything works no problem, but I just wanted to make sure that I am not missing anything in my set up.
I took the basics of combining Jquery's ajax with asp.net from Encosia side, and the response type wasn't mentioned there - I read it on another site and am I not sure how vital it is.
http://www.codeproject.com/KB/webservices/JsonWebServiceJQuery.aspx
Lists 4 different changes on the asp.net web service side. I only have the first 2 - in my web.config. The service itself and the Sample class is implemented without any serialization, it does have properties though. I guess the web service is JSON by default? And as long as your objects have properties, they are serializable by default? That was my understanding until I read this article.
The ResponseFormat attribute is not necessary. Including both client and server settings, only four things are required to do that:
- Add the ScriptHandlerFactory HttpHandler in your web.config.
- Decorate your web service(s) with the [ScriptService] attribute.
- Request the service's methods with the POST verb.
- Request the service's methods with a content-type of "application/json".
When you do those four things, the service methods' responses will automatically be serialized as JSON.
精彩评论