我从数据表中获取数据并将其转换为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 ... 如何使用上述方法实现这一目标?
答案 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。