Когда вы помечаете сервис как ScriptService, он автоматически обрабатывает сериализацию JSON. Вы не должны вручную сериализовать ответ.
Если вы хотите, чтобы возврат возвращался как «FirstName», то вы можете использовать класс DTO для управления синтаксисом. Просто возвращая строку, она возвращается как {'d': 'Keivan'} вместо {'d': {'FirstName': 'Keivan'}}.
[ScriptService]
public class CallDequeue : System.Web.Services.WebService
{
public class PersonDTO
{
public string FirstName;
}
[WebMethod]
public PersonDTO Dequeue()
{
var p = new PersonDTO();
p.FirstName = "Keivan";
return p;
}
}
Несколько изменений в синтаксисе вызова:
jQuery(document).ready(function() {
jQuery.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "CallDequeue.asmx/Dequeue",
data: "{}",
dataType: "json",
success: function(Msg) {
// Unless you're using 2.0, the data comes back wrapped
// in a .d object.
//
// This would just be Msg.d if you return a string instead
// of the DTO.
alert('success:' + Msg.d.FirstName);
},
error: function(Msg) {
alert('failed:' + Msg.status + ':' + Msg.responseText);
}
});
});
Вы можете прочитать подробнее о оболочке .d в ASP.NET AJAX здесь , если вам интересно.
Обновление:
Используя ASP.NET 2.0, вам необходимо установить ASP.NET AJAX Extensions v1.0 . Кроме того, убедитесь, что ваш web.config настроен для ASP.NET AJAX (в частности, раздел HttpHandlers).