我在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不是正确的方法。
答案 0 :(得分:6)
我猜想JsonResult
想要序列化你传入的对象。并且因为你的字符串或多或少'序列化'(用Json术语)所能做的就是看到对象是一个字符串,在'Json land'中,字符串文字在它们周围得到引号。
也许如果您将字符串更改为某种类型的强类型List / Collection / Array(表示字符串中的数据),它将正确序列化。
答案 1 :(得分:1)
我意识到你可能想要一个服务器端解决方案 - 但是如果你找不到一个,那么你可以在Javascript客户端评估返回的字符串:
var jsonResult = eval(resultWithQuotes);
请注意,只有在从安全来源获取结果时才应执行此操作,因为这可能会导致加载恶意脚本。