Формат ответа веб-метода в Mono2.0.1 - PullRequest
1 голос
/ 26 апреля 2009

Я написал [WebMethod], который возвращает строку, в которой хранится сериализованный объект

[WebMethod]
public string doStuffs() {
...
return JavaScriptConvert.SerializeObject(myObj); 
// JSON Serializer library is JSON.NET 1.3.1, for MONO
}

Когда я вызываю метод с $ .post из JQuery:

  $.ajax({
    type: "POST",
    url: "/web/doStuffs",
    data: "{}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(msg) {
      // Do stuffs
    }
  });

Проблема в ответе. Вот что я получаю:

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://localhost:8080/papi">{
 "field1" : "value1", "field2 : "value2", etc etc}</string>

Почему ответ JSON был заключен в XML? Я могу видеть из заголовка ответа HTTP (неправильно?) Установлен на:

Content-Type text/xml; charset=utf-8

Как переключить тип содержимого ответа? Спасибо.

Ответы [ 3 ]

1 голос
/ 20 мая 2009

Поддерживает ли Mono DataContractJsonSerializer ?

ОБНОВЛЕНИЕ: это выглядело бы так , но, возможно, есть ошибки?

1 голос
/ 02 июля 2009

AFAIK WebMethods возвращает объекты, которые автоматически сериализуются ASP.NET. Сериализатором по умолчанию является SOAP, так как это был ожидаемый формат для веб-сервисов.

Однако ASP.NET AJAX в System.Web.Extensions имеет обработчик замены, который использует сериализатор JSON. См. http://vampirebasic.blogspot.com/2009/04/aspnet-ajax-in-mono.html о том, как его зарегистрировать.

1 голос
/ 26 апреля 2009

Если я сделаю:

$.post(
    "/web/doStuffs",
    { username: $("#username").val() },
    function(data){
      var obj = $(data).children();
    },           
    "xml"
);

У меня будет JSON в var obj, готовый для анализа с JS. Это должно хорошо работать.

...