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

標簽:
  • C#
  • DataTable
  • List
  • Json
  • Dictionary
  • 轉換