将datatable中的列修改为两列的行,并在C#中转换为JSON
本文关键字:并在 JSON 转换 修改 datatable 两列 | 更新日期: 2023-09-27 18:25:04
我的数据表如下所示
年份类别msr
2010蛋糕872
2010 Soap 514
2011肥皂5666
2011蛋糕4391
当我转换为JSON时,我没有问题。
[{"Years":"2010","Category":"cake","msr":872},
{"Years":"2010","Category":"Soap","msr":514},
{"Years":"2011","Category":"cake","msr":566},
{"Years":"2011","Category":"Soap","msr":615}]
但我想将上面的数据表转换为下面的JSON。
[{"Years":"2010","cake":872}, {"Years":"2010","Soap":514}, {"Years":"2011","cake":566}, {"Years":"2011","Soap":615}]
我的JSON转换代码:
JavaScriptSerializer serializer = new JavaScriptSerializer();
List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
Dictionary<string, object> row;
foreach (DataRow dr in dt.Rows)
{
row = new Dictionary<string, object>();
foreach (DataColumn col in dt.Columns)
{
row.Add(col.ColumnName, dr[col]);
}
rows.Add(row);
}
return serializer.Serialize(rows);
有人能帮我写一些代码吗。
您可以轻松完成。需要注意的一点是,您不需要在列中使用循环,其次,我必须在循环中初始化dictionary,这样我就不会得到Dictionary contains already the same key
异常
DataTable dt = new DataTable();
dt.Columns.Add("Years");
dt.Columns.Add("Category");
dt.Columns.Add("msr");
DataRow dtrow = dt.NewRow();
dtrow["Years"] = "2010";
dtrow["Category"] = "cake";
dtrow["msr"] = "872";
dt.Rows.Add(dtrow);
DataRow dtrow2 = dt.NewRow();
dtrow2["Years"] = "2010";
dtrow2["Category"] = "Soap";
dtrow2["msr"] = "514";
dt.Rows.Add(dtrow2);
List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
Dictionary<string, object> row;
foreach (DataRow dr in dt.Rows)
{
row = new Dictionary<string, object>();
row.Add("Years", dr["Years"]);
row.Add(dr["Category"].ToString(), dr["msr"]);
rows.Add(row);
}
我调试了这段代码,它给出了想要的结果。让我知道任何更新
您可以这样做:
var result = dt.Rows.Cast<DataRow>()
.Select(row =>
{
var dict = new Dictionary<string, object>();
dict.Add("Years", row[0]);
dict.Add(row[1].ToString(), row[2]);
return dict;
});
其中dt
是原始数据表。