I am using Entity Framework with Database First approach. I want to fill my pie chart with data coming from database. The chart will be shown in home page so I have created a method named FillChart inside the HomeController.
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>
Javascript
<script type="text/javascript">
$(document).ready(function () {
debugger;
$.ajax({
url: "FillChart",
method: "GET",
dataType: 'json',
success: function (data) {
debugger;
console.log(JSON.parse(data));
var doorNumber = [];
var fullness = [];
for (var i = 0; i < data.length; i++) {
doorNumber.push("Door Number" + data[i].DoorNumber);
fullness.push(data[i].Fullness);
}
var chartData = {
labels: doorNumber,
datasets: [{
label: 'Oda Numarası ',
borderColor: 'rgba(200, 200, 200, 0.75)',
hoverBorderColor: 'rgba(200, 200, 200, 1)',
data: fullness
}]
};
var ctx = $("#pieChart");
var barGraph = new Chart(ctx,
{
type: 'pie',
data: chartData
});
},
error: function (data) {
console.log(data);
},
});
});
After the code line below is compiled:
var jsonString = JsonConvert.SerializeObject(dbRoomList.ToList());
jsonString value seems like it is not serialized:
"[{\"DoorNumber\":1,\"Fullness\":1},{\"DoorNumber\":2,\"Fullness\":0},{\"DoorNumber\":3,\"Fullness\":0},{\"DoorNumber\":4,\"Fullness\":0},{\"DoorNumber\":1,\"Fullness\":0}]"
But when I take a look at inside of jsonString with Text Visualizer it looks like this:
[{"DoorNumber":1,"Fullness":1},{"DoorNumber":2,"Fullness":0},{"DoorNumber":3,"Fullness":0},{"DoorNumber":4,"Fullness":0},{"DoorNumber":1,"Fullness":0}]
I am opening the browser in debug mode to inspect the changings of javascript code
and I saw that data.lenght is 151 instead of 5. The result of console.log(JSON.parse(data)); is:
I have checked the answer of this question even so I couldn't find any solution to my problem. What is the problem of my code?


return Json(dbRoomList, JsonRequestBehavior.AllowGet);- your serializing it to JSON twice