После получения динамического объекта и преобразования его в Json, используя следующий код:
dynamic realTimeData = db.Database.DynamicSqlQuery("exec QueryRealTimeData @treeId", new SqlParameter("@treeId", treeId));
int draw = Request["draw"] != null ? int.Parse(Request["draw"]) : 1;
var jsonDataTemp = new {
data = realTimeData,
draw = draw
};
return Json(jsonDataTemp, JsonRequestBehavior.AllowGet);
Было обнаружено, что формат преобразования Json (формат 1 ниже) не соответствует формату, который мне нужен:
{
"data": [{
"B01-Rtd": 10.285,
"001-Rtd": 7.522,
"011-Rtd": 20.903
}, {
"B01-Rtd": 10.031,
"001-Rtd": 7.518,
"011-Rtd": 20.903
}],
"draw": 1
}
Мне действительно нужно преобразовать в следующий формат (формат 2) для источника данных для JQuery DataTables:
[{
"COLUMNS": [
{"title": "B01-Rtd"},
{"title": "001-Rtd"},
{"title": "011-Rtd"}
],
"DATA": [
["10.285", "7.522", "20.903"],
["10.031", "7.518", "20.903"]
],
"draw": 1
}]
Спросите, как преобразовать в формат 2 или как использовать данные формата 1 в источнике данных DataTables?
Заметьте, что это динамически генерируемые анонимные объекты, не знаю заранее, какие столбцы, явно не инициализирующие столбец, должны быть динамически сгенерированы аналогичным двум Json-форматам, а затем использовать аналогичные следующие JS-инициализации DataTables:
$('#example').dataTable({
"data": dataObject[0].DATA,
"columns": dataObject[0].COLUMNS
});
Или существуют другие способы отображения анонимных типов с Datatables?
var dataObject = [{
"data": [{
"B01-Rtd": 10.285,
"001-Rtd": 7.522,
"011-Rtd": 20.903
}, {
"B01-Rtd": 10.031,
"001-Rtd": 7.518,
"011-Rtd": 20.903
}],
"draw": 1
}];
var data = [],
columns = [];
if (dataObject.length && dataObject[0].data.length) {
columns = Object.keys(dataObject[0].data[0]).map(x => {
return {
title: x
}
});
dataObject[0].data.forEach((item, index) => {
var values = [];
columns.forEach(x => {
values.push(item[x.title]);
});
data.push(values);
});
}
console.log(columns);
console.log(data);
//$('#example').dataTable({
// "data": data,
// "columns": columns
//});