2017-04-27 37 views
-2

我从数据表中获取数据,并将其转换成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数据迭代,这种方法是给键名称为列1,列2 ...(如数据表没有任何列名) 我想列名应该是类似1,2 ... 我怎样才能达到这个使用上述方法?

+1

你可以试试这个dict.Add((col.Ordinal + 1)的ToString(),行[山口]) – Thangadurai

回答

1

变化

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

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

当你有一个列名这将是采取和我们你没有一个你将采取的索引+ 1柱。

+0

涵盖了所有的场景,谢谢:) –

+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

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

Thangadurai,日Thnx在评论部分快速反应...... –