当前位置:Gxlcms > mysql > 【原】超简单类型转换(DataTable

【原】超简单类型转换(DataTable

时间:2021-07-01 10:21:17 帮助过:68人阅读

【原】超简单类型转换(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类,感谢各位前辈 ^_^

转换辅助类ConvertHelper代码如下:

ConvertHelper

转换辅助类 ConvertHelper where 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 < dt.Rows.Count; i++) 74 { ); 76 for (int j = 0; j < dt.Columns.Count; 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

人气教程排行