更改字典键

时间:2017-04-27 11:45:28

标签: c# json dictionary datatable

我从数据表中获取数据并将其转换为json,如下所示:

public object DataTableToJSON(DataTable table)
    {
        var list = new List<Dictionary<string, object>>();

        foreach (DataRow row in table.Rows)
        {
            var dict = new Dictionary<string, object>();

            foreach (DataColumn col in table.Columns)
            {
                dict.Add(col.ColumnName,row[col]);
            }
            list.Add(dict);
        }
        JavaScriptSerializer serializer = new JavaScriptSerializer();

        return serializer.Serialize(list);
    }

但是在迭代JSON数据时,此方法将键名称作为column1,column2 ...(因为datatable没有任何列名) 我希望列名应该像1,2 ... 如何使用上述方法实现这一目标?

3 个答案:

答案 0 :(得分:1)

你可以建立一个计数器

public object DataTableToJSON(DataTable table)
    {
        var list = new List<Dictionary<string, object>>();

        foreach (DataRow row in table.Rows)
        {
            var dict = new Dictionary<string, object>();
            var counter = 1;
            foreach (DataColumn col in table.Columns)
            {
                dict.Add(counter.ToString(),row[col]);
                counter++;
            }
            list.Add(dict);
        }
        JavaScriptSerializer serializer = new JavaScriptSerializer();

        return serializer.Serialize(list);
    }

但请记住:不允许使用双键名。

答案 1 :(得分:1)

DataColumn对象的Ordinal属性将为您提供列的位置,因此您可以调整代码以使用它。

public object DataTableToJSON(DataTable table)
    {
        var list = new List<Dictionary<string, object>>();

        foreach (DataRow row in table.Rows)
        {
            var dict = new Dictionary<string, object>();

            foreach (DataColumn col in table.Columns)
            {
                dict.Add((col.Ordinal+1).ToString(),row[col]) ;
            }
            list.Add(dict);
        }
        JavaScriptSerializer serializer = new JavaScriptSerializer();

        return serializer.Serialize(list);
    }

答案 2 :(得分:1)

更改

dict.Add(col.ColumnName,row[col]);

var keyName = string.IsNullOrEmpty(col.ColumnName) 
    ? col.Ordinal + 1 
    : col.ColumnName;
dict.Add(keyName, row[col]);

当你有一个专栏名称时,我们就会选择这一名称,而你没有专栏名称,你将获得该专栏的索引+ 1。