В веб-сервисе ASP.net, если выше не указано, какой формат ответа по умолчанию?
Также, если мой веб-сервис ниже:
[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 никогда не выполняется, а это означает, что веб-сервис всегда возвращает строку!
Итак, мой вопрос: [ScriptMethod (ResponseFormat = ResponseFormat.Json)] необходим на стороне определения веб-службы?
Как сейчас, я могу использовать массив примеров и обращаться к каждому объекту и его свойствам, как обычно в любом ООП-коде, что очень удобно, и все работает без проблем, но я просто хотел убедиться Я ничего не пропустил в моей настройке.
Я взял основы объединения ajax Jquery с asp.net со стороны Encosia, и тип ответа там не упоминался - я читал его на другом сайте и не уверен, насколько он важен.
http://www.codeproject.com/KB/webservices/JsonWebServiceJQuery.aspx
Перечисляет 4 различных изменения на стороне веб-службы asp.net. У меня есть только первые 2 - в моем web.config. Сам сервис и класс Sample реализованы без какой-либо сериализации, хотя и имеют свойства. Я предполагаю, что веб-сервис по умолчанию является JSON? И пока ваши объекты имеют свойства, они по умолчанию сериализуемы? Это было мое понимание, пока я не прочитал эту статью.