У меня есть страница asp.net с WebMethod на нем для пасования назад JSON к моему JavaScript.
Рев является веб-методом:
[WebMethod]
public static string getData(Dictionary<string, string> d) {
string response = "{ \"firstname\": \"John\", \"lastname\": \"Smith\" }";
return response;
}
Когда это возвращается клиенту, это отформатировано следующим образом:
{ \"d\": \"{ \"firstname\": \"John\", \"lastname\": \"Smith\" }\" }
Проблемой являются двойные кавычки, переносящие все под 'd'. Есть ли что-то, что я пропустил в веб-методе или некоторых других средствах возврата данных без кавычек? Я действительно не хочу разделять его на клиенте каждый раз. Также я видел другие статьи, где этого не происходит.
Любая справка ценилась бы спасибо.
Я предполагаю, что вы хотите вернуть JSON-представление объекта
{
firstname:"John",
lastname:"Smith"
}
но ваша сигнатура метода возвращает строку. Сериализация фреймворка ASP.Net правильно сериализует строку ответа
. Другими словами, если бы ваша функция была
string response = "foo";
return response;
Вы бы не удивились, если бы на выходе получился
{"d":{"foo"}}
Просто так получилось, что ответ
содержит двойные кавычки, которые нужно экранировать.
Очевидно, что вы просто хотите получить объект. У вас есть 2 варианта: -
1) использовать eval
в вашем javascript, чтобы превратить строку в объект, например
function onSuccessCallback(retval) {
var obj = eval(retval.d);
}`
2) или (и это мое предпочтительное решение), чтобы ваш метод возвращал фактический объект, и пусть JSON сериализация фреймворка сделает все за вас
[WebMethod]
public static object getData(Dictionary<string, string> d) {
var response = new { firstname = "John", lastname="Smith" };
return response;
}
Вы увидите, что это генерирует ответ, который вы, вероятно, изначально ожидали (например.
{"d":{"firstname": "John", "lastname": "Smith"}}