对于Highcharts折线图,从SQL、C#with Linq到JSON的数据转换

对于Highcharts折线图,从SQL、C#with Linq到JSON的数据转换,c#,json,highcharts,C#,Json,Highcharts,我希望将下面的SQL结果转换为Highcharts折线图的JSON列表。我用的是C#。我不知道如何创建一个合适的类,并用所需格式的数据填充它们 ID Name Month Year Data 2 Name 1 10 2015 4 2 Name 1 11 2015 5 2 Name 1 12 2015 6 3 Name 2 10 2015 6 3 Name 2 11 2015

我希望将下面的SQL结果转换为Highcharts折线图的JSON列表。我用的是C#。我不知道如何创建一个合适的类,并用所需格式的数据填充它们

ID  Name    Month   Year    Data
2   Name 1  10      2015    4
2   Name 1  11      2015    5
2   Name 1  12      2015    6
3   Name 2  10      2015    6
3   Name 2  11      2015    7
3   Name 2  12      2015    8
4   Name 3  10      2015    35
4   Name 3  11      2015    7
4   Name 3  12      2015    8
最终结果需要类似于这种格式。ID和年份也需要通过,但用于不同的事情。这能做到吗

categories: ['10', '11', '12'],....
series: [{
        name: 'Name 1',
        data: [4, 5, 6]
    }, {
        name: 'Name 2',
        data: [6, 7, 8]
    }, {
        name: 'Name 3',
        data: [35, 7, 8]
    }
}]
类程序
{
静态void Main(字符串[]参数)
{
var ro=新的RootObject();
ro.AddRow(1,“名称1”,2015年10月4日);
ro.AddRow(1,“名称1”,2015年11月5日);
ro.AddRow(1,“名称1”,2015年12月6日);
ro.AddRow(2,“名称2”,2015年10月6日);
ro.AddRow(2,“名称2”,2015年11月7日);
ro.AddRow(2,“名称2”,2015年12月8日);
ro.AddRow(3,“名称3”,2015年10月35日);
ro.AddRow(3,“名称3”,2015年11月7日);
ro.AddRow(3,“名称3”,2015年12月8日);
字符串输出=JsonConvert.SerializeObject(ro);
控制台写入线(输出);
//输出:
//{
//“类别”:[10,11,12],
//“系列”:[
//{“名称”:“名称1”,“数据”:[4,5,6]},
//{“名称”:“名称2”,“数据”:[6,7,8]},
//{“名称”:“名称3”,“数据”:[35,7,8]}]
//}
Console.ReadKey();
}
公共类根对象
{
公共根对象()
{
类别=新列表();
系列=新列表();
}
public void AddRow(整数id、字符串名称、整数年、整数月、整数数据)
{
如果(!categories.Contains(月))
{
类别。添加(月);
}
var serie=series.FirstOrDefault(x=>x.name==name);
if(serie==null)
{
系列=新系列(名称);
系列。添加(系列);
}
系列数据添加(数据);
}
公共列表类别{get;set;}
公共列表系列{get;set;}
}
公开课系列
{
公共系列(字符串_名称)
{
名称=_名称;
数据=新列表();
}
公共字符串名称{get;set;}
公共列表数据{get;set;}
}
}
课程计划
{
静态void Main(字符串[]参数)
{
var ro=新的RootObject();
ro.AddRow(1,“名称1”,2015年10月4日);
ro.AddRow(1,“名称1”,2015年11月5日);
ro.AddRow(1,“名称1”,2015年12月6日);
ro.AddRow(2,“名称2”,2015年10月6日);
ro.AddRow(2,“名称2”,2015年11月7日);
ro.AddRow(2,“名称2”,2015年12月8日);
ro.AddRow(3,“名称3”,2015年10月35日);
ro.AddRow(3,“名称3”,2015年11月7日);
ro.AddRow(3,“名称3”,2015年12月8日);
字符串输出=JsonConvert.SerializeObject(ro);
控制台写入线(输出);
//输出:
//{
//“类别”:[10,11,12],
//“系列”:[
//{“名称”:“名称1”,“数据”:[4,5,6]},
//{“名称”:“名称2”,“数据”:[6,7,8]},
//{“名称”:“名称3”,“数据”:[35,7,8]}]
//}
Console.ReadKey();
}
公共类根对象
{
公共根对象()
{
类别=新列表();
系列=新列表();
}
public void AddRow(整数id、字符串名称、整数年、整数月、整数数据)
{
如果(!categories.Contains(月))
{
类别。添加(月);
}
var serie=series.FirstOrDefault(x=>x.name==name);
if(serie==null)
{
系列=新系列(名称);
系列。添加(系列);
}
系列数据添加(数据);
}
公共列表类别{get;set;}
公共列表系列{get;set;}
}
公开课系列
{
公共系列(字符串_名称)
{
名称=_名称;
数据=新列表();
}
公共字符串名称{get;set;}
公共列表数据{get;set;}
}
}

然后如何将数据添加到类中?我编辑了答案,并提供了完整的工作示例。将代码粘贴到控制台应用程序中,并使用nuget安装Newtonsoft.Json。(安装软件包Newtonsoft.Json)或Json序列化程序。这回答了您的问题吗?这真的很有帮助,我以前没有考虑过,所以我应该能够在其他方面实现这一点。然后如何将数据添加到类中?我编辑了答案,并提供了一个完整的工作示例。将代码粘贴到控制台应用程序中,并使用nuget安装Newtonsoft.Json。(选择安装包Newtonsoft.Json)或Json序列化程序。这回答了您的问题吗?这非常有用,我以前没有考虑过这一点,所以我应该能够在其他方面实现这一点。
class Program
{
    static void Main(string[] args)
    {
        var ro = new RootObject();
        ro.AddRow(1, "Name1", 2015, 10, 4);
        ro.AddRow(1, "Name1", 2015, 11, 5);
        ro.AddRow(1, "Name1", 2015, 12, 6);

        ro.AddRow(2, "Name2", 2015, 10, 6);
        ro.AddRow(2, "Name2", 2015, 11, 7);
        ro.AddRow(2, "Name2", 2015, 12, 8);

        ro.AddRow(3, "Name3", 2015, 10, 35);
        ro.AddRow(3, "Name3", 2015, 11, 7);
        ro.AddRow(3, "Name3", 2015, 12, 8);

        string output = JsonConvert.SerializeObject(ro);
        Console.WriteLine(output);

        //Output:
        //{
        //    "categories":[10,11,12],
        //    "series":[
        //        {"name":"Name1","data":[4,5,6]},
        //        {"name":"Name2","data":[6,7,8]},
        //        {"name":"Name3","data":[35,7,8]}]
        //}

        Console.ReadKey();
    }

    public class RootObject
    {
        public RootObject()
        {
            categories = new List<int>();
            series = new List<Series>();
        }

        public void AddRow(int id, string name, int year, int month, int data)
        {
            if (!categories.Contains(month))
            {
                categories.Add(month);
            }

            var serie = series.FirstOrDefault(x => x.name == name);
            if (serie == null)
            {
                serie = new Series(name);
                series.Add(serie);
            }
            serie.data.Add(data);
        }

        public List<int> categories { get; set; }
        public List<Series> series { get; set; }
    }

    public class Series
    {
        public Series(string _name)
        {
            name = _name;
            data = new List<int>();
        }

        public string name { get; set; }
        public List<int> data { get; set; }
    }
}