在MVC JsonResult操作中,我将数据绑定到字典并通过JSON返回。它以不同于我需要的形式提供数据。
我的代码:
var query = obj.Where(x => x.Date > new DateTime(01 / 01 / 2000)
&& x.Date <= Convert.ToDateTime(shortDate))
.GroupBy(x => x.Date)
.Select(x => new { LogDate = x.Key, Count = x.Count() });
Dictionary<string, int> openWith = new Dictionary<string, int>();
foreach (var output in query)
{
openWith.Add(output.LogDate.ToShortDateString(), output.Count);
}
string letter = "letter";
var chartsdata = openWith;
return Json(chartsdata,letter, JsonRequestBehavior.AllowGet);
JSON数据的格式为:
var data1 = {
"01/28/2015": 1,
"01/30/2015": 6,
"01/29/2015": 1,
"01/22/2015": 3,
"01/20/2015": 1,
"01/10/2015": 5 }
要绘制图表,我需要以下表格中的数据:
var data1 = [
[gd(2015, 1, 28), 1],
[gd(2015, 1, 30), 6],
[gd(2015, 1, 29), 1],
[gd(2015, 1, 22), 3],
[gd(2015, 1, 20), 1],
[gd(2015, 1, 10), 5] ]
如果有人知道,请告诉我:如何更改数据格式?
答案 0 :(得分:0)
试试这个。
foreach (var output in query)
{
openWith.Add("gd(" + output.LogDate.Year + ", " + output.LogDate.Month + ", "
+ output.LogDate.Day + ")", output.Count);
}
答案 1 :(得分:0)
使用
foreach (var output in query)
{
openWith.Add(output.LogDate.Subtract(new DateTime(1970,1,1)).TotalMilliseconds, output.Count);
}
这样,您可以计算服务器端的时间戳,而不需要调用gd
函数。
答案 2 :(得分:0)
根据JSON standard,您返回的字符串无效JSON。表达式gd(2015, 1, 28)
不是有效的JSON基元之一,"string"
(在引号中),number
,true
,false
和{{1} }。据我所知,内置的.Net JSON格式化程序都不会产生类似的JSON。
因此,您需要自己手动构造一个包含所需表达式的字符串,并按原样返回:
null
产生:
var jsonString = query.Aggregate(new StringBuilder("["), (sb, pair) =>
{
if (sb.Length > 1)
sb.AppendLine(",");
return sb.AppendFormat("[gd({0}, {1}, {2}), {3}]", pair.LogDate.Year, pair.LogDate.Month, pair.LogDate.Day, pair.Count);
}).Append("]").ToString();
Debug.WriteLine(jsonString);