【问题标题】:How to convert a datatable to dictionary<string, list<object>> in C#?如何在 C# 中将数据表转换为字典<string, list<object>>?
【发布时间】:2017-03-30 07:34:42
【问题描述】:

我有一个这样的数据表

ID CategoryID Category
1   1         Category1
2   1         Category2

我正在尝试生成像这样的键控 json

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

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

【问题讨论】:

  • 数据表结构在我的问题中不清楚,所以我再试一次... ID|类别 ID |类别 ------------------------------------------------ 1 | 1 |类别 1 2 | 1 |类别2
  • 也许可以试试 Json.net stackoverflow.com/questions/2979922/…

标签: c# json dictionary dataset


【解决方案1】:

这里是完整代码:

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"}
        ]
}

【讨论】:

  • 谢谢! @亚历山大·彼得罗夫。工作完全没有变化。我一直在考虑分组,但只是没有完成它......如果任何人正在寻找......向嵌套对象添加更多列,我将它们添加到用逗号分隔的行中...... var dict = dt .AsEnumerable() .GroupBy(row => row.Field("PromotionID")) .ToDictionary(g => g.Key.ToString(), g => g.Select(row => new { DriveID = row.Field("DriveID"), DrieDate=row.Field("DriveDate") }).ToList());
猜你喜欢
  • 2012-02-21
  • 2018-12-27
  • 1970-01-01
  • 1970-01-01
  • 2020-11-27
  • 1970-01-01
  • 2021-08-08
  • 1970-01-01
相关资源
最近更新 更多