关于MVC的Json()方法返回内容的问题

Imcx 2016-09-27 08:32:53

public JsonResult Index()
{
return Json("{\"name\":\"fa\",\"age\":18}");

//微软Json()方法的描述
//创建一个将指定对象序列化为 JavaScript 对象表示法 (JSON) 的 System.Web.Mvc.JsonResult 对象。
}


如果直接触发这个方法在页面上显示内容是
"{\"name\":\"fa\",\"age\":18}"

实际上是我用ajax发送一个post请求过去,并在回调函数里写到
var json = JSON.parse(data);
接着本想在谷歌浏览器里查看下这个对象,结果输出的是{"name":"fa","age":18}
输出的内容没有被引号括起来,所以也不知道是字符串还是啥

正常情况应该是输出 Object {name: "fa", age: 18} 这样的

如果把这个结果再转换一次就可以得到上面的
var json = JSON.parse(data);
json = JSON.parse(data);
json //Object {name: "fa", age: 18}
...全文
219 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2016-09-28
  • 打赏
  • 举报
回复
看你怎么看的,如果是调试程序,能看到斜杠,其实这个斜杠不存在,是转义的关系。最终输出是没有的
摇撼大地 2016-09-28
  • 打赏
  • 举报
回复
response。contenttype。。。。text/json
xuzuning 2016-09-28
  • 打赏
  • 举报
回复
显然 return Json(json); 中的 json 应该是对象,而不是字符串 也就是 Json 方法自己会完成将对象序列化成 json 传递工作 var result = new { code = "0000", data = data//这个值是一个DataTable }; return Json(result);
Imcx 2016-09-28
  • 打赏
  • 举报
回复
而且return Json().... => 而是
引用 3 楼 q646926099 的回复:
这样写太复杂了 还容易出错,直接用匿名对象就好了啊。 return Json(new{name="test",age=12});
我这样试过不行,我这边是这样写的

var result = new
{
    code = "0000",
    data = data//这个值是一个DataTable
};
var json = Newtonsoft.Json.JsonConvert.SerializeObject(result);//这一句可以得到我想要的json的字符串形式,而且是正确的
//return Json(result);  //500 Internal Server Error
//Response.Write(json);   //这是我目前的解决办法,问题不大,我只是很纠结下面那个return的结果到底为什么不能一次解析出来
//Response.End();   //这句要写,不然结果里有两个合在一起的json字符串,一个有反斜杠一个没有反斜杠
return Json(json);   //如果用这里的返回前台需要调用JSON.prase两次才能得到json对象
Imcx 2016-09-28
  • 打赏
  • 举报
回复
引用 2 楼 caozhy 的回复:
看你怎么看的,如果是调试程序,能看到斜杠,其实这个斜杠不存在,是转义的关系。最终输出是没有的
嗯,可能是我表达的有问题,我在意的并不是有没有斜杠,而且return Json()这个方法返回的结果不能直接在前台用JSON.prase解析成一个json对象
xiaoqiu_net 2016-09-28
  • 打赏
  • 举报
回复
这样前台直接接收一个json对象 直接操作就好了。 data.Name,,,,
xiaoqiu_net 2016-09-28
  • 打赏
  • 举报
回复
这样写太复杂了 还容易出错,直接用匿名对象就好了啊。 return Json(new{name="test",age=12});
Imcx 2016-09-27
  • 打赏
  • 举报
回复
其他情况: 1.如果直接
var json = JSON.parse("{\"name\":\"fa\",\"age\":18}");
那么得到的也是
Object {name: "fa", age: 18} 
2.在后台里return之前把json
response.write(json);response.end()
这样处理也可以在前台得到json对象

110,532

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧