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