2009-04-26 2 views
1

Я написал [WebMethod], которые возвращают строку, хранить упорядоченный объектWeb формат ответа метод Mono2.0.1

[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 Response это (? Ошибочно) устанавливается:

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

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

+0

У меня нет опыта работы с Mono, поэтому я просто прокомментирую. Если ваш doStuffs() является веб-методом .NET, он может автоматически сериализовать его результат как XML. Это касается веб-методов ASP.Net .asmx, по крайней мере. –

+0

ASFIK да, он автоматически сериализуется в XML. Я ищу способ переключиться на JSON. – 2009-04-26 09:29:12

+0

Какие преимущества предлагает WebMethod, если вы отключите его сериализацию? Я не уверен, что можно пропустить этап сериализации WebMethod, поскольку это более или менее его главный момент. Или это известно, что это возможно? Я считаю, что даже URL-адрес «web/doStuffs» требует функциональности JSON из фреймворка, поскольку обычный SOAP имеет только одну конечную точку и указывает метод в своем теле. –

ответ

1

Если я:

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

у меня будет JSON в вар OBJ готовы получить разобран с JS. Это должно работать хорошо.

+0

Вид поражения в JSON? –

1

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

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

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