【原】超简单类型转换(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
转换辅助类ConvertHelperwhere T : new()6 {DataTable-->ListIListDataTableConvertToList(DataTable dt)13 {14
IListts = new List();Type type = typeof(T);创建类型的对象(用于比较用)20
//object convertObj = Activator.CreateInstance(type, null);反射取得类型实例的属性数组PropertyInfo[] propertys =type.GetProperties();(DataRow dr indt.Rows)27 {28
//创建类型的对象(用于赋值用)T outputObj = newT();(PropertyInfo pi inpropertys)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-->JsonDataTableConvertToJson(DataTable dt)66 {67
StringBuilder jsonBuilder = newStringBuilder();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-->JsonDataSetConvertToJson(DataSet ds)100 {101
StringBuilder json = newStringBuilder();(DataTable dt inds.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
本文原创发布php中文网,转载请注明出处,感谢您的尊重!