C#DataTable与List/Json/Dictionary互相转换

知识库

C#DataTable与List/Json/Dictionary互相转换

2023-09-02 17:29


本文将介绍如何在C#中进行DataTable与List、Json、Dictionary之间的相互转换。

                                            
    
    

在C#开发中,经常会遇到需要将DataTable对象与List、Json、Dictionary等类型相互转换的场景。下面将介绍一些常用的方法:

1. DataTable转换为List

可以使用LINQ查询语句将DataTable转换为List:

        
public static List DataTableToList(DataTable dataTable) where T : new()
{
    List list = new List();
    foreach (DataRow row in dataTable.Rows)
    {
        T item = new T();
        foreach (DataColumn column in dataTable.Columns)
        {
            PropertyInfo property = typeof(T).GetProperty(column.ColumnName);
            if (property != null && row[column] != DBNull.Value)
            {
                property.SetValue(item, row[column], null);
            }
        }
        list.Add(item);
    }
    return list;
}
        
    

2. List转换为DataTable

可以使用反射和泛型将List转换为DataTable:

        
public static DataTable ListToDataTable(List list)
{
    DataTable dataTable = new DataTable();
    Type type = typeof(T);
    PropertyInfo[] properties = type.GetProperties();
    foreach (PropertyInfo property in properties)
    {
        dataTable.Columns.Add(property.Name, property.PropertyType);
    }
    foreach (T item in list)
    {
        DataRow row = dataTable.NewRow();
        foreach (PropertyInfo property in properties)
        {
            row[property.Name] = property.GetValue(item, null);
        }
        dataTable.Rows.Add(row);
    }
    return dataTable;
}
        
    

3. DataTable转换为Json

使用Json.Net库可以方便地将DataTable转换为Json字符串:

        
string dataTableJson = JsonConvert.SerializeObject(dataTable);
        
    

4. Json转换为DataTable

同样使用Json.Net库可以将Json字符串转换为DataTable:

        
DataTable dataTable = JsonConvert.DeserializeObject(jsonString);
        
    

5. DataTable转换为Dictionary

可以使用LINQ查询语句将DataTable转换为Dictionary:

        
public static Dictionary DataTableToDictionary(DataTable dataTable, string keyColumnName, string valueColumnName)
{
    return dataTable.AsEnumerable()
        .ToDictionary(row => row.Field(keyColumnName), row => row.Field(valueColumnName));
}
        
    

6. Dictionary转换为DataTable

可以通过创建一个新的DataTable,并将Dictionary中的键值对逐个添加到DataTable的行中:

        
public static DataTable DictionaryToDataTable(Dictionary dictionary)
{
    DataTable dataTable = new DataTable();
    dataTable.Columns.Add("Key", typeof(TKey));
    dataTable.Columns.Add("Value", typeof(TValue));
    foreach (KeyValuePair pair in dictionary)
    {
        dataTable.Rows.Add(pair.Key, pair.Value);
    }
    return dataTable;
}
        
    

label :
  • C#
  • DataTable
  • List
  • Json
  • Dictionary
  • 转换