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)換