我在MVC应用程序中,我在高图中生成图表时遇到问题,我有这段代码
foreach (var item in query)
{
object[] values = new object[3];
values[0] = i;
values[1] = Convert.ToDecimal(item.ini) ;
values[2] = Convert.ToDecimal(item.ir);
dataResult.Add(values);
}
生成以下内容:
传递给json,返回给我这个图表
我喜欢的是“IRI201308NF3”的值是该系列的名称,其他两个值是gerarariam正确的图表。
在Json下
$.getJSON("/GrafLev/GetDadosByGraficos", { parameter },
function (data) {
var chart = new Highcharts.Chart({
chart: {
renderTo: 'container',
ignoreHiddenSeries: false
},
yAxis: {
title: {
text: 'Exchange rate'
},
plotLines: [{
value: limInferior,
color: 'green',
dashStyle: 'shortdash',
width: 2,
label: {
text: 'Inferior'
}
}, {
value: limSuperior,
color: 'red',
dashStyle: 'shortdash',
width: 2,
label: {
text: 'Superior'
}
}]
},
xAxis: {
},
series: [{ data: data }]
});
});
我找到了example,但我无法格式化。 唯一的问题是图表是一条线。
答案 0 :(得分:4)
阅读Highcharts
api,它的系列参数正在查找具有name
和data
属性的字典数组。您正在将data
属性传递给混合数组。现在,您可以在javascript中重新格式化响应JSON,但我认为在C#
中正确格式化JSON更简洁:
Dictionary<string, object> dataResult = new Dictionary<string, object>();
dataResult["data"] = new List<object[]>();
dataResult["name"] = i;
foreach (var item in query)
{
object[] values = new object[2];
values[0] = Convert.ToDecimal(item.ini) ;
values[1] = Convert.ToDecimal(item.ir);
((List<object[]>)dataResult["data"]).Add(values);
}
这将导致JSON看起来像这样:
{"data":[[0,0],[1,10],[2,20],[3,30],[4,40],[5,50],[6,60],[7,70],[8,80],[9,90]],"name":"Hi Mom"}
现在你应该把它传递给series参数:
series: [ data ]
注意,这个JSON仍然会返回一个系列。如果你需要返回多个系列,只需注释,我就会修改代码。
<强> EDITS 强>
对于多个系列,添加包含每个系列Dictionary<string, object>
的外部列表。
以下是一个例子:
List<Dictionary<string, object>> dataResult = new List<Dictionary<string, object>>();
for (int i = 1; i <= 2; i++)
{
Dictionary<string, object> aSeries = new Dictionary<string, object>();
aSeries["data"] = new List<object[]>();
aSeries["name"] = "Series " + i.ToString();
for (int j = 0; j < 10; j++)
{
object[] values = new object[2];
values[0] = j;
values[1] = j * 10 * i;
((List<object[]>)aSeries["data"]).Add(values);
}
dataResult.Add(aSeries);
}
传递给Highcharts
as:
series: data