2016-11-16 10 views
0

Ich habe eine Datentabelle wie dieseWie konvertiert man eine Datentabelle in Dictionary <string, list <object>> in C#?

ID CategoryID Category 
1 1   Category1 
2 1   Category2 

und ich versuche Schlüssel json wie diese

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

zu erzeugen, wie ich so meine Datentabelle zu dictionary<string, list<object>> verdeckte kann, dass ich es mit JSON.NET serialisiert werden kann Ja Einlesen, um Schlüsselprobleme mit dem Wörterbuch zu duplizieren. Vielen Dank im Voraus für irgendwelche Ideen.

+0

Datentabelle Struktur in meine Frage nicht klar ist, so versuche ich es noch einmal ... ID | CategoryID | Category ------------------------------------ 1 | 1 | Kategorie1 2 | 1 | Category2 – NShaik

+0

Vielleicht versuchen Json.net http://stackoverflow.com/questions/2979922/how-to-convert-datatable-to-json-string-using-json-net – KMoussa

Antwort

2

Hier vollständige Code:

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)); 

Letzte Zeichenfolge gibt Ihnen json (ich es für eine bessere Lesbarkeit formatiert):

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

Vielen Dank! @ Alexander Petrov. Arbeitete mit absolut keine Änderungen. Ich dachte immer über Gruppierung, aber nur nicht Ballen, um es zu vervollständigen .... Wenn ein Körper sucht ... um dem verschachtelten Objekt weitere Spalten hinzuzufügen, fügte ich sie in Zeile durch Komma getrennt wie folgt ... var dict = dt.AsEnumerable() .GroupBy (row => row.Field ("PromotionID")) . ToDictionary (g => g.Key.ToString(), g => g.Wählen (row => new {DriveID = row.Field ("DriveID"), DrieDate = row.Field ("DriveDate")}). ToList()); – NShaik

Verwandte Themen