【原】超簡單類型轉換(DataTable

【原】超簡單類型轉換(DataTable — List/JSON)的實現 背景: 開發工作中經常需要類型的轉換,比如DataTable轉換為List、或是DataTable轉換為JSON等等, 每次都重復的寫相同的代碼,比如:把實體類的字段屬性一個一個的列出來,從DataTabel中把值取出來賦

【原】超簡單類型轉換(DataTable –> List/JSON)的實現

背景:

開發工作中經常需要類型的轉換,比如DataTable轉換為List、或是DataTable轉換為JSON等等,

每次都重復的寫相同的代碼,比如:把實體類的字段屬性一個一個的列出來,從DataTabel中把值取出來賦上,

真的好麻煩 (*=*)

思考:

1)DataTable轉換為List,香港空間,主要是使用反射,遍歷實體類的屬性,和DataTabel中的列進行對比并賦值

2)DataTable轉換為JSON,主要是拼接JSON串

實踐:

參考了網上很多前輩的思路和實現,制作了一個ConvertHelper類,感謝各位前輩 ^_^

【原】超簡單類型轉換(DataTable

轉換輔助類ConvertHelper代碼如下:

ConvertHelper

轉換輔助類 ConvertHelperwhere T : new() 6 { DataTable–>List IList DataTableConvertToList(DataTable dt) 13 { 14 IList ts = new List(); Type type = typeof(T); 創建類型的對象(用于比較用) 20 //object convertObj = Activator.CreateInstance(type, null); 反射取得類型實例的屬性數組 PropertyInfo[] propertys = type.GetProperties(); (DataRow dr in dt.Rows) 27 { 28 // 創建類型的對象(用于賦值用) T outputObj = new T(); (PropertyInfo pi in propertys) 33 { (dt.Columns.Contains(pi.Name)) 36 { 37 if (!pi.CanWrite) 38 { 39 continue; 40 } value = dr[pi.Name]; (value != DBNull.Value) 46 { pi.SetValue(outputObj, value, null); 49 } 50 } 51 } ts.Add((T)outputObj); 55 } ts; 58 } DataTable–>Json DataTableConvertToJson(DataTable dt) 66 { 67 StringBuilder jsonBuilder = new StringBuilder(); jsonBuilder.Append(); 71 jsonBuilder.Append(dt.TableName); ); 73 for (int i = 0; i ) 74 { ); 76 for (int j = 0; j ) 77 { ); 79 jsonBuilder.Append(dt.Columns[j].ColumnName); ); 81 jsonBuilder.Append(dt.Rows[i][j].ToString()); ); 83 } 84 jsonBuilder.Remove(jsonBuilder.Length – 1, 1); ); 86 } 87 jsonBuilder.Remove(jsonBuilder.Length – 1, 1); ); ); jsonBuilder.ToString(); 92 } DataSet–>Json DataSetConvertToJson(DataSet ds) 100 { 101 StringBuilder json = new StringBuilder(); (DataTable dt in ds.Tables) 104 { json.Append(); 107 json.Append(dt.TableName); ); 109 json.Append(DataTableConvertToJson(dt)); ); 111 } json.ToString(); 114 } 115 }

如何使用呢?

很方便的,先定義一個實體類UserInfo

UserInfo

1 ///

2 /// 用戶信息實體 3 ///

4 public class UserInfo 5 { 6 ///

7 /// 用戶編號 8 ///

9 public int UserID { get; set; } 10 11 ///

12 /// 用戶姓名 13 ///

14 public string UserName { get; set; } 15 16 ///

17 /// 用戶薪資 18 ///

19 public decimal Salary { get; set; } 20 }

再定義一個方法填充一些數據模擬DataTable

? 版權聲明
THE END
喜歡就支持一下吧
點贊12 分享