我认为以下内容将是一项非常常见的任务,并认为将有一个简单的解决方案,但我找不到。
如果我有以下结构的数据表。
ID Name Active ID1 John TRUE ID2 Bill FALSE
我想将其序列化为JSON对象,其中ID列是JSON对象中的一个节点,例如:
[ { "ID1": { "Name": "John", "Active": "True" }, "ID2": { "Name": "Bill", "Active": "False" } } ]
我调查了JSON.NET,但无法正常工作。编辑:我正在使用C#
使用JSON.NET,这非常简单。只需将您的数据表转换成等效的字典词典:
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])); }
然后致电:
JsonConvert.SerializeObject(DatatableToDictionary(dt, "ID"), Newtonsoft.Json.Formatting.Indented);
这是完整的测试:
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"));
结果:
{ "ID1": { "Name": "John", "Active": "True" }, "ID2": { "Name": "Bill", "Active": "False" } }