Я создал файл 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.