2016-08-17 4 views
0

ich eine SQL-Tabelle mit Werten haben wie:Problem beim Konvertieren Datentabelle, um verschachtelte json C#

Main_group Sub_group CstCmpCode 
COMBO SET DD-101  AH01 
COMBO SET DD-102  AH01 

ich verschachtelte JSON-String erstellen müssen wie:

{ 
    "CstCmpCode": "AH01", 
    "Main_Group": "COMBO SET", 
    "sub_group": [ 
     { 
     "Sub_Group": "DD-101", 
     }, 
     { 
     "Sub_Group": "DD-102", 
     } 
    ] 
} 

Mein Code wie unten für die Umwandlung von Datentabelle zu verschachtelten json string:

System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); 

SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["TallyWeb"].ToString()); 
SqlCommand cmd = new SqlCommand(); 
cmd.CommandText = "select distinct Main_group, Sub_group, CstCmpCode from TlyStkSumm where CstCmpCode = @CstCmpCode"; 
cmd.Parameters.AddWithValue("@CstCmpCode", CstCmpCode); 
DataSet ds = new DataSet(); 
DataTable dt = new DataTable(); 
SqlDataAdapter da = new SqlDataAdapter(cmd); 
da.SelectCommand.Connection = con; 
da.Fill(dt); 
con.Close(); 

List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>(); 
Dictionary<string, object> row = null; 
foreach (DataRow rs in dt.Rows) 
{ 
    row = new Dictionary<string, object>(); 
    foreach (DataColumn col in dt.Columns) 
    { 
     row.Add(col.ColumnName, rs[col]); 
    } 
    rows.Add(row); 
} 

Pls. überprüfe das oben was ich falsch mache.

Danke.
Yogesh.Sharma

+0

Welche Ausgabe erhalten Sie derzeit? Daten? ein Fehler? –

+0

Ich erhalte einen Fehler: "Fehler beim Konvertieren von Wert \" \ u0004 Primär \ "zum Eingeben von \ u0027System.Collections.Generic.List'1 [WebService + Untergruppe] \ u0027. Pfad \ u0027 [0] .Sub_Gruppe \ u0027, Zeile 1 , Position 48. " –

+0

irgendein pls. Hilf mir ?? –

Antwort

0

Sieht aus wie Sie brauchen Gruppierung auf Main_Group und CstCmpCode, würde ich Ihnen vorschlagen einfache Linq zu gruppieren und in gewünschtem Format auswählen und an JavaScriptSerializer es zu serialisieren passieren

var results = dt.AsEnumerable() 
    .GroupBy(x => 
     new 
     { 
      Main_group = x.Field<string>("Main_group"), 
      CstCmpCode = x.Field<string>("CstCmpCode") 
     }) 
    .Select(x=> 
     new 
     { 
      Main_group = x.Key.Main_group, 
      CstCmpCode = x.Key.CstCmpCode, 
      sub_group = x.Select(s => new {Sub_Group= s.Field<string>("Sub_group") }) 

     }); 

JavaScriptSerializer serializer = new JavaScriptSerializer(); 
var serializedString = serializer.Serialize(results); 

Ausgang:.

[{ 
    "Main_group": "COMBO SET", 
    "CstCmpCode": "AH01", 
    "Sub_group": ["DD-101 ", "DD -102 "] 
}] 
+0

danke für Ihre Antwort. aber ich muss JSON Antwort wie oben angezeigt werden –

+0

Das ist einfach ändern Sie einfach Linq Abfrage, um ein anonymes Objekt mit dem Namen und Wert zu erstellen. –

+0

Entschuldigung für diese Kommentare, aber ich bin neu in JSON sowie in C# langauage –

0

Die Linie:

row.Add(col.ColumnName, rs[col]); 

Hier können Sie verschiedene Arten von Objekten zu dieser Sammlung von Ihnen hinzufügen möchten. Wenn alle Werte als Strings gespeichert werden (Ich denke, das ist OK, da Sie JSon erstellen Objekt danach, versuchen Sie diese Zeile zu ändern:

row.Add(col.ColumnName, rs[col].ToString()); 
+0

zeigt Fehler: "Fehler beim Konvertieren von Wert \" \ u0004 Primär \ "auf \ u0027System.Collections.Generic.List'1 [WebService + SubGroup] \ u0027. Pfad \ u0027 [0] .Sub_Group \ u0027, Zeile 1, Position 48. " –

Verwandte Themen