C#DataTable與List/Json/Dictionary互相轉(zhuǎn)換

知識(shí)庫(kù)

C#DataTable與List/Json/Dictionary互相轉(zhuǎn)換

2023-09-02 17:29


本文將介紹如何在C#中進(jìn)行DataTable與List、Json、Dictionary之間的相互轉(zhuǎn)換。

                                            
    
    

在C#開(kāi)發(fā)中,經(jīng)常會(huì)遇到需要將DataTable對(duì)象與List、Json、Dictionary等類(lèi)型相互轉(zhuǎn)換的場(chǎng)景。下面將介紹一些常用的方法:

1. DataTable轉(zhuǎn)換為L(zhǎng)ist

可以使用LINQ查詢(xún)語(yǔ)句將DataTable轉(zhuǎn)換為L(zhǎng)ist:

        
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轉(zhuǎn)換為DataTable

可以使用反射和泛型將List轉(zhuǎn)換為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轉(zhuǎn)換為Json

使用Json.Net庫(kù)可以方便地將DataTable轉(zhuǎn)換為Json字符串:

        
string dataTableJson = JsonConvert.SerializeObject(dataTable);
        
    

4. Json轉(zhuǎn)換為DataTable

同樣使用Json.Net庫(kù)可以將Json字符串轉(zhuǎn)換為DataTable:

        
DataTable dataTable = JsonConvert.DeserializeObject(jsonString);
        
    

5. DataTable轉(zhuǎn)換為Dictionary

可以使用LINQ查詢(xún)語(yǔ)句將DataTable轉(zhuǎn)換為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轉(zhuǎn)換為DataTable

可以通過(guò)創(chuàng)建一個(gè)新的DataTable,并將Dictionary中的鍵值對(duì)逐個(gè)添加到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
  • 轉(zhuǎn)換