如何在ASP.NET MVC中返回JsonResult

时间:2009-05-12 04:38:07

标签: jquery asp.net-mvc json

我在Action方法中将以下数据作为字符串:

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

简单。

当我调用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 个答案:

答案 0 :(得分:6)

我猜想JsonResult想要序列化你传入的对象。并且因为你的字符串或多或少'序列化'(用Json术语)所能做的就是看到对象是一个字符串,在'Json land'中,字符串文字在它们周围得到引号。

也许如果您将字符串更改为某种类型的强类型List / Collection / Array(表示字符串中的数据),它将正确序列化。

答案 1 :(得分:1)

我意识到你可能想要一个服务器端解决方案 - 但是如果你找不到一个,那么你可以在Javascript客户端评估返回的字符串:

var jsonResult = eval(resultWithQuotes);

请注意,只有在从安全来源获取结果时才应执行此操作,因为这可能会导致加载恶意脚本。