Home >Database >Mysql Tutorial >【原】超简单类型转换(DataTable

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

WBOY
WBOYOriginal
2016-06-07 17:56:331060browse

【原】超简单类型转换(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 ) 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

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Previous article:MongoDB插入查询数据Next article:MongoDB的三层操作