【问题标题】:Changing Dictionary Key更改字典键
【发布时间】:2017-04-27 11:45:28
【问题描述】:

我正在从数据表中获取数据并将其转换为 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...(因为数据表没有任何列名) 我希望列名应该类似于 1,2 ... 如何使用上述方法实现这一点?

【问题讨论】:

  • 你可以试试这个 dict.Add((col.Ordinal+1).ToString(),row[col])

标签: c# json dictionary datatable


【解决方案1】:

改变

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

到

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

当你有一个列名时,这将被采用,而我们你没有一个,你将采用该列的索引 + 1。

【讨论】:

    【解决方案2】:

    你可以建立一个计数器

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-20
        • 2017-02-03
        • 2020-12-27
        • 1970-01-01
        • 2022-07-12
        • 2011-05-23
        • 2021-04-14
        • 2021-02-01
        相关资源
        最近更新 更多