Разница ч / б вернуть json и javascriptserialer - PullRequest
0 голосов
/ 26 октября 2011

Может кто-нибудь сказать мне разницу, если я сделаю в моем ActionResult

в этом случае

var transAcc= "SomeListHere";
var  v = new JavaScriptSerializer().Serialize(transAcc);
return Content(v);

и

var transAcc= "SameListHere";
return Json(new {list=transAcc });

Ответы [ 2 ]

3 голосов
/ 26 октября 2011

Разница в том, что в первом случае вы не устанавливаете заголовок ответа Content-Type на application/json, а во втором это делается.

В первом случае ответ представляет собой простой текст и выглядит следующим образом:

"SomeListHere"

И заголовок Content-Type установлен на text/html, что неверно, поскольку это не HTML.Это text/plain.Это даже не допустимая строка JSON.

Во втором случае это строка JSON, которая выглядит следующим образом:

{"list":"SomeListHere"}

Также в первом примере кода вы выполняете сериализацию JSON вручную.который представляет собой программный код и не должен выполняться в контроллере; его следует выводить из внешнего интерфейса в пользовательском ActionResult, что именно то, что создатели инфраструктуры ASP.NET MVC предложили вам в лице JsonResult, который является вашим вторым примером кода.1015 *

Вывод: если вы хотите отправить JSON-сериализованное представление некоторой модели клиенту, всегда используйте второй подход.

1 голос
/ 26 октября 2011

Отсутствует. Второй использует первый. Но я нахожу второй более читабельным .

Вот код JsonResult ExecuteResult (с использованием отражателя), который используется во втором случае:

public override void ExecuteResult(ControllerContext context)
{
    .... // some stuff
    if (this.Data != null)
    {
        JavaScriptSerializer serializer = new JavaScriptSerializer();
        response.Write(serializer.Serialize(this.Data));
    }
}

UPDATE

Ответ Дарина верный, хотя мой показывает внутреннюю часть второго.

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