I thought the following would be a pretty common task and assumed there would be an easy solution for it, but i can\'t find one.
If I have a datatable in the followi
This is quite simple with JSON.NET. Just convert your data table into the equivalent dictionary of dictionaries:
public Dictionary> DatatableToDictionary(DataTable dt, string id)
{
var cols = dt.Columns.Cast().Where(c => c.ColumnName != id);
return dt.Rows.Cast()
.ToDictionary(r => r[id].ToString(),
r => cols.ToDictionary(c => c.ColumnName, c => r[c.ColumnName]));
}
Then call:
JsonConvert.SerializeObject(DatatableToDictionary(dt, "ID"), Newtonsoft.Json.Formatting.Indented);
Here's the full test:
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"));
And the result:
{
"ID1": {
"Name": "John",
"Active": "True"
},
"ID2": {
"Name": "Bill",
"Active": "False"
}
}