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);
        }
       ...
    }
});