有人可以告诉我,如果我在ActionResult中做了差异
在这种情况下
var transAcc= "SomeListHere";
var v = new JavaScriptSerializer().Serialize(transAcc);
return Content(v);
和
var transAcc= "SameListHere";
return Json(new {list=transAcc });
答案 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));
}
}