Возвраты ASP.NET WebMethod JSON, перенесенный в кавычки

У меня есть страница 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'. Есть ли что-то, что я пропустил в веб-методе или некоторых других средствах возврата данных без кавычек? Я действительно не хочу разделять его на клиенте каждый раз. Также я видел другие статьи, где этого не происходит.

Любая справка ценилась бы спасибо.

7
задан Christian Strempfer 14 November 2013 в 10:23
поделиться

1 ответ

Я предполагаю, что вы хотите вернуть 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"}}

8
ответ дан 7 December 2019 в 01:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: