简体   繁体   English

修改数据表中两列的列到行,并在C#中转换为JSON

[英]Modify column to row for two columns in datatable and convert to JSON in C#

My Datatable looks like below. 我的数据表如下所示。

Years Category msr 年类别MSR
2010 cake 872 2010蛋糕872
2010 Soap 514 2010肥皂514
2011 Soap 5666 2011香皂5666
2011 cake 4391 2011蛋糕4391

When I convert to JSON I got not Problem. 当我转换为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}]

but I want to convert the above datatable as below JSON. 但我想将上面的数据表转换为JSON以下。

[{"Years":"2010","cake":872}, {"Years":"2010","Soap":514}, {"Years":"2011","cake":566}, {"Years":"2011","Soap":615}]

My JSON Conversion Code: 我的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);

Can some one help me with some code. 有人可以帮我一些代码吗?

You can do it easily. 您可以轻松做到。 One thing to note that you don't need a loop inside a coloumn and secondly i have to initialize dictionary inside a loop so that i don't get Dictionary contains already the same key exception 需要注意的一件事是,您不需要在大括号内进行循环,其次我必须在循环内初始化字典,这样我才不会得到Dictionary contains already the same key异常的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);
}

i debugged this code and it gives the desire results. 我调试了这段代码,它给出了期望的结果。 let me know for any updates 让我知道任何更新

You can do something like this: 您可以执行以下操作:

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; 
    });

Where dt is your original data table. 其中dt是您的原始数据表。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM