c# - 谷歌图表的多系列 JSON 数据
问题描述
我正在尝试创建一个 JSON 提要以向 Google 图表返回一个包含四个系列的多折线图。我正在努力形成正确的 JSON 以返回图表。
我正在使用一个存储过程,它会生成一长串我需要在图表中显示的数据。我希望能够获取一长串数据并将其转换为四个单独的数据系列并以 JSON 格式发送回图表。
我的模型:
public class FoodCountCompare
{
[JsonProperty("Count")]
public int Count { get; set; }
[JsonProperty("Day")]
public string Day { get; set; }
[JsonProperty("Type")]
public string Type { get; set; }
}
我的 SPROC:
SELECT COUNT(P) AS 'Count', DATENAME(DW, fldTimeStamp) AS 'Day', @P AS 'Type' FROM [dbname].[FoodTypes] WHERE Protein = 1 AND fldUserId = ''+ @UserId+'' GROUP BY DATENAME(DW, fldTimeStamp)
UNION ALL
SELECT COUNT(H) AS 'Count', DATENAME(DW, fldTimeStamp) AS 'Day', @H AS 'Type' FROM [dbname].[FoodTypes]WHERE HEC = 1 AND fldUserId = ''+ @UserId+'' GROUP BY DATENAME(DW, fldTimeStamp)
UNION ALL
SELECT COUNT(L) AS 'Count', DATENAME(DW, fldTimeStamp) AS 'Day', @L AS 'Type' FROM [dbname].[FoodTypes]WHERE LEC = 1 AND fldUserId = ''+ @UserId+'' GROUP BY DATENAME(DW, fldTimeStamp)
UNION ALL
SELECT COUNT(O) AS 'Count', DATENAME(DW, fldTimeStamp) AS 'Day', @F AS 'Type' FROM [dbname].[FoodTypes]WHERE OmegaFA = 1 AND fldUserId = ''+ @UserId+'' GROUP BY DATENAME(DW, fldTimeStamp)
然后在我的 C# 代码中创建四个单独的列表,我确信这是错误的。每个列表都包含正确的数据,因此这部分有效。我尝试过使用数组和序列化,但我被困在如何更进一步。
[Function(Name = "[dbname].[FoodCountCompare]")]
public List<FoodCountCompare> GetFoodCountCompare(){
string UserId = User.Identity.GetUserId();
var dc = new DataClasses1DataContext();
var x = dc.FoodCountCompare(UserId).ToList();
var Protein = (from a in x where a.Type == "P" select new { a.Count, a.Day, a.Type }).ToList();
var HEC = (from a in x where a.Type == "H" select new { a.Count, a.Day, a.Type }).ToList();
var LEC = (from a in x where a.Type == "L" select new { a.Count, a.Day, a.Type }).ToList();
var F = (from a in x where a.Type == "O" select new { a.Count, a.Day, a.Type }).ToList();
//Add code to create JSON here
JavaScriptSerializer js = new JavaScriptSerializer();
string p = js.Serialize(Protein);
string h = js.Serialize(HEC);
string l = js.Serialize(LEC);
string f = js.Serialize(F);
return something_like_json;
}
public JsonResult FoodCountCompare(){
var items = new List<FoodCountCompare>(GetFoodCountCompare());
return Json(items, JsonRequestBehavior.AllowGet);
}
对我来说,问题是,您如何获取这些数据并将其转换为 JSON,例如嵌套数组或直接数据集。
解决方案
你的意思是这样的:
[Function(Name = "[dbname].[FoodCountCompare]")]
public List<FoodCountCompare> GetFoodCountCompare(){
string UserId = User.Identity.GetUserId();
var dc = new DataClasses1DataContext();
var x = dc.FoodCountCompare(UserId).ToList();
var items = x.Select(d => new FoodCountCompare { Type = d.Type, Day = d.Day, Count = d.Count })
return items;
}
public JsonResult FoodCountCompare(){
var items = new List<FoodCountCompare>(GetFoodCountCompare());
return Json(new {
Protein = items.Where(d => d.Type == "P"),
Hec = items.Where(d => d.Type == "H"),
Lec = items.Where(d => d.Type == "L"),
F = items.Where(d => d.Type == "O"),
}, JsonRequestBehavior.AllowGet);
}
这将导致每种类型有 4 个不同的数组:
{"Protein":[ ... ],"Hec":[ ... ], "Lec":[ ... ], "F":[ ... ]}
我相信您不需要指定确切的 json 属性名称。
推荐阅读
- ruby-on-rails - 创建预签名帖子时,AWS SDK 不包括 X-Amz-Credential 中的访问密钥 (AKID),但仅在 Heroku 上
- elm - 具有默认值的 Elm 类型别名
- python - 如何使 python ide 在高 dpi 显示器上工作而不会模糊
- java - 在 JAVA 中这种排序叫什么?
- metal - 正确的是将数组从 Metal Kernel 函数传递给本地函数
- java - android - 如何从另一个布局声明一个小部件?
- android-studio - 应用程序退出时出现未处理的异常
包含 - java - Firebase android 可以在模拟器上运行,但不能在设备上运行
- aws-lambda - 使用 Amazon 登录以获得 Alexa Skills (LWA)
- sql - 如何在 SQL 中对一组元素进行大小写