C# 将DataTable转换为每行带键的JSON
我认为下面是一个非常常见的任务,并假设有一个简单的解决方案,但我找不到 如果我有一个如下结构的数据表C# 将DataTable转换为每行带键的JSON,c#,json,serialization,datatable,json.net,C#,Json,Serialization,Datatable,Json.net,我认为下面是一个非常常见的任务,并假设有一个简单的解决方案,但我找不到 如果我有一个如下结构的数据表 ID Name Active ID1 John TRUE ID2 Bill FALSE 我想将其序列化为JSON对象,其中ID列是JSON对象中的节点,如: [ { "ID1": { "Name": "John", "Active": "True" }, "ID2": {
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]));
}
以下是完整的测试:
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"
}
}
使用JSON.NET(Newtonsoft.JSON.Linq
)
var obj=新作业对象(
dataTable.Rows.Cast()
.Select(r=>newjproperty(r[“ID”].ToString(),
新作业项目(
新的JProperty(“Name”,r[“Name”].ToString()),
新建JProperty(“活动”,r[“活动”].ToString())
)
))
);
//将JObject转换为JSON字符串
var json=obj.ToString();
这种情况不会单独发生。你用什么语言工作?嗯,对了,忘了提C#,thx。你看过这个吗?还有这个:谢谢,伟大的帮手方法!thanx是完整的示例。
{
"ID1": {
"Name": "John",
"Active": "True"
},
"ID2": {
"Name": "Bill",
"Active": "False"
}
}
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();