2010-05-17 3 views
6

В веб-службе ASP.net, если указанное выше не указано, каков формат ответа по умолчанию? Кроме того, если мой веб-сервис ниже:[ScriptMethod (ResponseFormat = ResponseFormat.Json)]

[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 по умолчанию? И до тех пор, пока ваши объекты имеют свойства, по умолчанию они сериализуются? Это было мое понимание, пока я не прочитал эту статью.

+0

Ваш первый вопрос (какой формат ответа по умолчанию?) Легко ответить: запустите отладчик JavaScript и узнайте. Или передайте его в 'alert()' или что-то еще. – Tomalak

ответ

6

Атрибут ResponseFormat не требуется. В том числе как настройки клиента, так и сервера требуется только четыре вещи:

  • Добавить ScriptHandlerFactory HttpHandler в свой web.config.
  • Украсьте свои веб-сервисы с помощью атрибута [ScriptService].
  • Запросить методы обслуживания с помощью глагола POST.
  • Запросить методы обслуживания с типом контента «application/json».

Когда вы выполните эти четыре действия, ответы методов обслуживания будут автоматически сериализованы как JSON.

+0

Спасибо, Дейв! Когда я читал, что на Encosia изначально, я, должно быть, пропустил эту часть информации :) – sarsnake

Смежные вопросы