如何将数据表转换为字典<string,list <object =“”>&gt;在C#?

时间:2016-11-16 07:38:11

标签: c# json dictionary dataset

我有这样的数据表

ID CategoryID Category
1   1         Category1
2   1         Category2

我试图生成像这样的键控json

    {
     "1"
        [
         {Category: Category1},
         {Category:Category2}
        ]
    }

如何将我的数据表转换为dictionary<string, list<object>>,以便我可以使用JSON.NET对其进行序列化 是运行以复制字典的关键问题。 提前感谢任何想法。

1 个答案:

答案 0 :(得分:2)

这里有完整的代码:

var dataTable = new DataTable();

dataTable.Columns.Add("ID", typeof(int));
dataTable.Columns.Add("CategoryID", typeof(int));
dataTable.Columns.Add("Category", typeof(string));

dataTable.Rows.Add(1, 1, "Category1");
dataTable.Rows.Add(2, 1, "Category2");
dataTable.Rows.Add(3, 2, "Category3");
dataTable.Rows.Add(4, 2, "Category4");
dataTable.Rows.Add(5, 1, "Category5");
dataTable.Rows.Add(6, 3, "Category6");


var dict = dataTable.AsEnumerable()
    .GroupBy(row => row.Field<int>("CategoryID"))
    .ToDictionary(
        g => g.Key.ToString(),
        g => g.Select(row => new { Category = row.Field<string>("Category") }).ToList()
    );

var jss = new JavaScriptSerializer();
Console.WriteLine(jss.Serialize(dict));

最后一个字符串为你提供了json(为了更好的可读性,我将其格式化):

{
  "1":
        [
          {"Category":"Category1"},
          {"Category":"Category2"},
          {"Category":"Category5"}
        ],
  "2":
        [
          {"Category":"Category3"},
          {"Category":"Category4"}
        ],
  "3":
        [
          {"Category":"Category6"}
        ]
}