Как вернуть JsonResult в ASP.NET MVC - PullRequest
3 голосов
/ 12 мая 2009

У меня есть следующие данные в виде строки в моем методе Action:

string json = "[[1,2],[3,4],[5,6]]";

Simple.

Когда я вызываю представление Json, оно заключает результат в две двойные кавычки. Это мешает клиентскому javascript загружать этот результат в объект javascript.

eg. 
return Json(json);

result => "[[1,2],[3,4],[5,6]]"

но, если я возвращаю результат как ContentResult, то результат загружается в объект javascript, и я могу делать с ним все, что мне нужно.

eg.
return new ContentResult
{
    Content = json,
    ContentType = "application/json",
    ContentEncoding =System.Text.Encoding.UTF8
};

result => [[1,2],[3,4],[5,6]]      
          (notice how the double quotes are missing?).

Итак, кто-нибудь может объяснить, что я должен делать правильно, пожалуйста? Я чувствую, что ContentResult - не правильный способ сделать это.

Ответы [ 2 ]

6 голосов
/ 12 мая 2009

Я бы предположил, что JsonResult хочет сериализовать объект, который вы передаете. А поскольку ваша строка более или менее "сериализована" (в терминах Json), все, что она может сделать, это увидеть, что объект является строкой и в «Стране Джсона» строковые литералы заключаются в кавычки вокруг них.

Может быть, если вы измените вашу строку на строго типизированный Список / Коллекция / Массив некоторого вида (который представляет данные, которые есть у вас в строке), она будет правильно сериализована.

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

Я понимаю, что вам, вероятно, нужно решение на стороне сервера, но на тот случай, если вы не можете его найти, вы можете оценить возвращенную строку на стороне клиента Javascript:

var jsonResult = eval(resultWithQuotes);

Обратите внимание, что делать это следует только в том случае, если вы получаете результат из безопасного источника, поскольку это может привести к загрузке вредоносного скрипта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...