【原】超简单类型转换(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中文网,转载请注明出处,感谢您的尊重!

php data类型转换,【原】超简单类型转换(DataTable相关推荐

  1. 超简单,Python爬取阴阳师游戏原声

    Python爬取阴阳师游戏BGM,附完整代码 爬取阴阳师游戏原声 网页分析 教程开始 1 请求json文件并获取数据 2 保存文件 注意,一定要看 结语 完整源码 目标网址:https://yys.1 ...

  2. 超简单,Python爬取阴阳师式神视频

    Python爬取阴阳师官网式神CG,附完整代码 爬取阴阳师式神宣传CG 网页分析 教程开始 1 发送网页请求 使用第三方库requests来获取网页 使用BeautifulSoup解析网页 2 获取目 ...

  3. 关于显式类型转换以及隐式类型转换

    哈喽嗷,铁汁们,咱们又见面了.是我嗷,一个不正经楼主. 首先提出一点,关于这个小细节专栏,看了绝对没好处(滑稽) 咳咳,咱们言归正传. 目录 隐式类型转换 ①算术运算中的隐式转换 规则一:字符和整数的 ...

  4. 超简单的图片爬取项目,复制粘贴就能用,批量爬取动漫图片。(保姆教程,可根据需要修改URL)

    各位未来国家栋梁们好啊~相信栋梁们经常需要在网络上寻找各种资源,作为二次元的必备精神食粮,图片资源那是必不可少!在这里用python写了一个超简单的图片爬取小项目~话不多说,附上源码!(有用的话点个赞 ...

  5. 超详细超简单的搭建三台虚拟机集群

    1.vm虚拟机配置 宿主机:真机 NAT模式:(VM虚拟机里面设置) 查看:你的NAT网段和网关是多少? 网段:192.168.136.0/24 网关:192.168.136.2 我的规划: NN1 ...

  6. 小程序公共封装ajax,超简单 Promise封装小程序ajax 超好用 以及封装登录

    //网络类 //封装网络请求 const ajax = (ajaxData, method) => { wx.showLoading({ title: '加载中', mask: true }); ...

  7. ASP.NET中一种超简单的Ajax解决方案

    为什么是Ajax2? 因为之前有一个blqw.Ajax,并且已经在项目中投入使用了,但是没有这个方便,这个是后来才弄的,为了纪念第一版的blqw.Ajax,所以这个就2了... 话说看了评论才发现,原 ...

  8. 用python实现视频换脸_超简单使用Python换脸实例

    换脸! 这段时间,deepfakes搞得火热,比方说把<射雕英雄传>里的朱茵换成了杨幂,看下面的图!毫无违和感! 其实早在之前,基于AI换脸的技术就得到了应用,比方说<速度与激情7& ...

  9. 基于vue-cli、elementUI的Vue超简单入门小例子

    基于vue-cli.elementUI的Vue超简单入门小例子 这个例子还是比较简单的,独立完成后,能大概知道vue是干嘛的,可以写个todoList的小例子. 开始写例子之前,先对环境的部署做点简单 ...

最新文章

  1. 途牛自营门市超500家 单笔订单交易额最高近300万元
  2. vmware虚拟机中ubuntu上网问题
  3. 云数据库精华问答 | 现有数据库优化到云环境有什么好处​?
  4. strocli64 源码_storcli 简易使用介绍
  5. CoreGraphics之CGContextSaveGState与UIGraphicsPushContext
  6. mysql cnf参数_系统运维|MySQL my.cnf参数配置优化详解
  7. 进阶12 多线程、等待唤醒机制、线程池
  8. [转载]函数getopt(),及其参数optind
  9. 【P20】PCM1794全平衡解码模块电路
  10. JBOSS的下载安装、环境变量配置以及部署
  11. winrar的破解激活
  12. 第五次打卡 模型融合
  13. govendor使用及错误处理
  14. 游戏服务器为什么要选择高防服务器
  15. 在线制作数据库ER模型
  16. linux mysql insert into_MySQL的INSERT语句小结
  17. 常用颜色及其RGB值
  18. 语音识别——麦克风选型
  19. 输油管道监测解决方案
  20. Andorid IData95手持设备开发过程

热门文章

  1. 微信小程序 详解 小程序支付
  2. Vue项目实战02 : vue项目刷新当前页面的三种方法
  3. java 实现气泡 源码分析_冒泡排序算法原理及JAVA实现代码
  4. linux ntp时间立即同步命令_如何在 Linux 下确认 NTP 是否同步?
  5. 廖雪峰Python教程-笔记
  6. LeetCode-19 删除链表的倒数第N个节点
  7. 使用vue制作富文本框
  8. CSS模块化方案分类
  9. 关于substring的理解
  10. Vue2.0+vuex+H5实现音乐播放及歌曲切换功能的方法及原理解释