Мультисерийные данные JSON для Google Charts - PullRequest
0 голосов
/ 12 мая 2018

Я пытаюсь создать фид 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, например,вложенный массив или прямой набор данных.

1 Ответ

0 голосов
/ 12 мая 2018

Вы имеете в виду что-то вроде:

[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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...