Как разрешить выход ASMX файла JSON

Я создал файл ASMX с кодом за файлом. Он отлично работает, но выводит XML.

Однако мне нужно это для вывода JSON. Конфигурация ResponseFormat, похоже, не работает. Мой код:

[System.Web.Script.Services.ScriptService]
public class _default : System.Web.Services.WebService {
    [WebMethod]
    [ScriptMethod(UseHttpGet = true,ResponseFormat = ResponseFormat.Json)]
    public string[] UserDetails()
    {
        return new string[] { "abc", "def" };
    }
}

Ответ 1

От WebService возвращает XML, даже когда ResponseFormat установлен в JSON:

Убедитесь, что запрос является POST-запросом, а не GET. У Скотта Гатри есть сообщение объясняющее, почему.

Хотя он написан специально для jQuery, это также может быть полезно для вас:
Использование jQuery для использования веб-служб ASP.NET JSON

Ответ 2

Чтобы получить чистую строку JSON без ее обертывания в XML, вам нужно написать строку JSON непосредственно в HttpResponse и изменить тип возврата WebMethod на void.

    [System.Web.Script.Services.ScriptService]
    public class WebServiceClass : System.Web.Services.WebService {
        [WebMethod]
        public void WebMethodName()
        {
            HttpContext.Current.Response.Write("{property: value}");
        }
    }

Ответ 3

Вероятно, это старые новости, но, похоже, это волшебство:

  • [ScriptService] атрибут класса веб-службы
  • [ScriptMethod (UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] по методу
  • Content-type: application/json in request

С этими частями на месте успешно выполняется запрос GET

Ответ 4

Быстро получив, что я усвоил трудный (в основном, 4 часа в Google), вы можете использовать PageMethods в вашем файле ASPX, чтобы вернуть JSON (с маркером [ScriptMethod()] для статического метода, однако, если вы решите переместить свои статические методы в файл asmx, он не может быть статическим методом.

Кроме того, вам нужно сообщить веб-службе Content-Type: application/json, чтобы вернуть JSON из вызова (я использую jQuery и 3 ошибки, которые следует избегать при использовании jQuery, статья была очень интересной - ее с того же сайта, упомянутого в другом ответе здесь).

Ответ 5

Вы вызываете веб-сервис от клиента script или на стороне сервера?

Вы можете обнаружить, что отправка заголовка типа контента на сервер поможет, например.

'приложения/JSON; кодировка = UTF-8'

На стороне клиента я использую прототип клиентской библиотеки, и при вызове Ajax есть параметр contentType, где вы можете указать это. Я думаю, что jQuery имеет метод getJSON.

Ответ 6

Альтернатива: используйте общий обработчик HTTP (.ashx) и используйте свою любимую библиотеку json для ручного сериализации и десериализации JSON.

Я обнаружил, что полный контроль над обработкой запроса и генерирование ответа превосходит любые другие .NET-предложения для простых веб-служб RESTful.