差异B / W返回json和javascriptserialer

时间:2011-10-26 10:54:12

标签: jquery ajax asp.net-mvc-3

有人可以告诉我,如果我在ActionResult中做了差异

在这种情况下

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

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

2 个答案:

答案 0 :(得分:3)

不同之处在于,在第一种情况下,您没有将Content-Type响应标头设置为application/json,而在第二种情况下,这是完成的。

在第一种情况下,响应是纯文本,如下所示:

"SomeListHere"

并且Content-Type标头设置为text/html这是不正确的,因为这不是HTML。它是text/plain。这甚至不是有效的JSON字符串。

在第二种情况下,它是一个JSON字符串,如下所示:

{"list":"SomeListHere"}

同样在第一个代码示例中,您手动执行JSON序列化,这是管道代码,不应在控制器中完成,应该在自定义ActionResult中外部化,这正是ASP.NET MVC框架的创建者所具有的。面对JsonResult,这是你的第二个代码示例。

结论:如果要向客户端发送某些模型的JSON序列化表示,请始终使用第二种方法。

答案 1 :(得分:1)

无。第二个使用第一个。但我发现第二个更具可读性

以下是JsonResult ExecuteResult(使用反射器)背后的代码,用于您的第二种情况:

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

更新

达林的回答是正确的,尽管我的回应显示了第二个内部。