2016-11-16 126 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

相關問題