【问题标题】:Multi series JSON data for Google Charts谷歌图表的多系列 JSON 数据
【发布时间】:2018-10-22 18:49:27
【问题描述】:

我正在尝试创建一个 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,例如嵌套数组或直接数据集。

【问题讨论】:

    标签: c# json google-visualization


    【解决方案1】:

    你的意思是这样的:

    [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 属性名称。

    【讨论】:

    • 是的,就是这样...我会试一试的。我整天都在读牛顿,没有看到这样的东西......
    • 它不是真正的牛顿,我只是在创建 C# 匿名类型docs.microsoft.com/en-us/dotnet/csharp/programming-guide/…
    • 效果很好,我只做了一次调整。我也会阅读您发送的链接。标记为正确答案。
    猜你喜欢
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-24
    • 2019-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多