2016-11-16 122 views
0

我有这样如何将C#中的数据表转换为Dictionary <string,list <object>>?

ID CategoryID Category 
1 1   Category1 
2 1   Category2 

一个DataTable,我试图生成密钥的JSON这样

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

我如何可以隐蔽我的数据表,以dictionary<string, list<object>>,这样我可以用JSON.NET 序列化是用字典重复关键问题。 提前感谢您的任何想法。

+0

的数据表结构不是清楚我的问题,所以我再试一次... ID | CategoryID |类别 ------------------------------------ 1 | 1 | Category1 2 | 1 |类别2 – NShaik

+0

也许尝试Json.net http://stackoverflow.com/questions/2979922/how-to-convert-datatable-to-json-string-using-json-net – KMoussa

回答

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

谢谢! @ Alexander Petrov。完全没有改变。我一直在考虑分组,但只是不打包完成它....如果有任何机构正在寻找...向嵌套对象添加更多列我将它们添加到用逗号分隔的行,像这样... 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()); – NShaik

相关问题