Javascript JsonConvert.SerializeObject不';t将我的对象序列化为JSON字符串
我使用实体框架和数据库优先的方法。我想用来自数据库的数据填充饼图。该图表将显示在主页中,因此我在Javascript JsonConvert.SerializeObject不';t将我的对象序列化为JSON字符串,javascript,json,ajax,asp.net-mvc,Javascript,Json,Ajax,Asp.net Mvc,我使用实体框架和数据库优先的方法。我想用来自数据库的数据填充饼图。该图表将显示在主页中,因此我在HomeController中创建了一个名为FillChart的方法 HomeController public class HomeController : Controller { private readonly IRoomRepository _roomRepository; public HomeController(IRoomRepository roomReposito
HomeController
中创建了一个名为FillChart
的方法
HomeController
public class HomeController : Controller
{
private readonly IRoomRepository _roomRepository;
public HomeController(IRoomRepository roomRepository)
{
_roomRepository = roomRepository;
}
public ActionResult Index()
{
return View();
}
[HttpGet]
public ActionResult FillChart()
{
var dbRoomList = _roomRepository.GetAll().Select(x => new { x.DoorNumber, x.Fullness });
var jsonString = JsonConvert.SerializeObject(dbRoomList.ToList());
return Json(jsonString, JsonRequestBehavior.AllowGet);
}
}
HTML
<canvas id="pieChart"></canvas>
jsonString值似乎未序列化:
"[{\"DoorNumber\":1,\"Fullness\":1},{\"DoorNumber\":2,\"Fullness\":0},{\"DoorNumber\":3,\"Fullness\":0},{\"DoorNumber\":4,\"Fullness\":0},{\"DoorNumber\":1,\"Fullness\":0}]"
但是当我使用文本可视化工具查看jsonString的内部时,它看起来是这样的:
[{"DoorNumber":1,"Fullness":1},{"DoorNumber":2,"Fullness":0},{"DoorNumber":3,"Fullness":0},{"DoorNumber":4,"Fullness":0},{"DoorNumber":1,"Fullness":0}]
我在调试模式下打开浏览器,检查javascript代码的变化
我看到了数据。长度是151而不是5。console.log(JSON.parse(data))的结果代码>是:
尽管如此,我还是找不到解决问题的办法。我的代码有什么问题?151是原始json字符串的长度
您从未将JSON.Parse结果设置为变量,然后在数组变量上循环
您需要在成功处理程序中执行此操作
success: function (data) {
debugger;
var jsonArray = JSON.parse(data);
console.log(jsonArray);
var doorNumber = [];
var fullness = [];
for (var i = 0; i < jsonArray.length; i++) {
doorNumber.push("Door Number" + data[i].DoorNumber);
fullness.push(data[i].Fullness);
}
成功:函数(数据){
调试器;
var jsonArray=JSON.parse(数据);
console.log(jsonArray);
var门号=[];
var满度=[];
for(var i=0;i
如果要从控制器返回Json()
,则不需要在发送之前使用JsonConvert.SerializeObject()
对对象进行序列化。Controller.Json()
方法将创建一个JsonResult
对象,该对象将指定的对象序列化为JavaScript对象表示法(Json)
同样在jQuery代码中,由于您已经将JSON
指定为dataType
,从服务器返回的data
在success()
服务器端
[HttpGet]
public ActionResult FillChart()
{
var dbRoomList = _roomRepository.GetAll()
.Select(x => new { x.DoorNumber, x.Fullness });
return Json(dbRoomList, JsonRequestBehavior.AllowGet);
}
$.ajax({
url: "FillChart",
method: "GET",
dataType: 'json',
success: function (data) {
// data should already be a JSON object
var doorNumber = [];
var fullness = [];
for (var i = 0; i < data.length; i++) {
doorNumber.push("Door Number" + data[i].DoorNumber);
fullness.push(data[i].Fullness);
}
...
}
});
jQuery代码
[HttpGet]
public ActionResult FillChart()
{
var dbRoomList = _roomRepository.GetAll()
.Select(x => new { x.DoorNumber, x.Fullness });
return Json(dbRoomList, JsonRequestBehavior.AllowGet);
}
$.ajax({
url: "FillChart",
method: "GET",
dataType: 'json',
success: function (data) {
// data should already be a JSON object
var doorNumber = [];
var fullness = [];
for (var i = 0; i < data.length; i++) {
doorNumber.push("Door Number" + data[i].DoorNumber);
fullness.push(data[i].Fullness);
}
...
}
});
它只是返回Json(dbRoomList,JsonRequestBehavior.AllowGet);
-您将其序列化为Json twice您是对的@StephenMuecke.我收到了。谢谢。节省了我的时间。谢谢大卫。
$.ajax({
url: '@Url.Action("fillChart", "home", new { area = "" })',
method: "GET",
dataType: 'json',
success: function (data) {
// data should already be a JSON object
var doorNumber = [];
var fullness = [];
for (var i = 0; i < data.length; i++) {
doorNumber.push("Door Number" + data[i].DoorNumber);
fullness.push(data[i].Fullness);
}
...
}
});