2012-06-21 21 views
5

ile JSON'a dönüştürün Aşağıdakilerin oldukça yaygın bir görev olacağını düşündüm ve bunun için kolay bir çözüm olacağını düşündüm, ancak bir tane bulamıyorum.DataTable'ı satır başına

Aşağıdaki yapıda bir veri tabanım varsa.

ID Name Active 
ID1 John TRUE 
ID2 Bill FALSE 

Ben kimliği sütunu gibi JSON nesnesi bir düğüm olan bir JSON nesnesi olarak serialize istiyorum: Ben JSON.NET içine baktım

[ 
    { 
     "ID1": { 
      "Name": "John", 
      "Active": "True" 
     }, 
     "ID2": { 
      "Name": "Bill", 
      "Active": "False" 
     } 
    } 
] 

ama çalışmak için alamadım . Düzenleme: kullanıyorum C#

+0

Bu, yalnızca kendi başına olmaz. Hangi dilde çalışıyorsun? – lanzz

+0

Hmm sağ C#, thx unutmamak. – Arnoldiusss

+2

Buna baktınız mı? http://stackoverflow.com/questions/451460/datatable-to-json – Blueberry

cevap

20

Bu JSON.NET ile oldukça basittir. Sadece sözlüklerde eşdeğer sözlüğüne veri tablosunu dönüştürmek:

public Dictionary<string, Dictionary<string, object>> DatatableToDictionary(DataTable dt, string id) 
{ 
    var cols = dt.Columns.Cast<DataColumn>().Where(c => c.ColumnName != id); 
    return dt.Rows.Cast<DataRow>() 
      .ToDictionary(r => r[id].ToString(), 
          r => cols.ToDictionary(c => c.ColumnName, c => r[c.ColumnName])); 
} 

Sonra çağırır:

var dt = new DataTable("MyTable"); 
dt.Columns.Add("ID"); 
dt.Columns.Add("Name"); 
dt.Columns.Add("Active"); 

dt.LoadDataRow(new[] {"ID1", "John", "True"}, true); 
dt.LoadDataRow(new[] {"ID2", "Bill", "False"}, true); 

JsonConvert.SerializeObject(DatatableToDictionary(dt, "ID")); 

Ve sonuç:

{ 
    "ID1": { 
    "Name": "John", 
    "Active": "True" 
    }, 
    "ID2": { 
    "Name": "Bill", 
    "Active": "False" 
    } 
} 

JsonConvert.SerializeObject(DatatableToDictionary(dt, "ID"), Newtonsoft.Json.Formatting.Indented); 

İşte tam test var

+0

Teşekkürler, harika yardımcı yöntem! tam örnek için teşekkürler. – Arnoldiusss

0

JSON.NET'i Kullanma (Newtonsoft.Json.Linq)

var obj = new JObject(
    dataTable.Rows.Cast<DataRow>() 
     .Select(r => new JProperty(r["ID"].ToString(), 
       new JObject(
        new JProperty("Name", r["Name"].ToString()), 
        new JProperty("Active", r["Active"].ToString()) 
       ) 
      )) 
); 

// Convert the JObject to a JSON string 
var json = obj.ToString(); 
İlgili konular