public class ConvertHelper<T>where T:new()
{
/// <summary>
/// 利用反射和泛型
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static List<T> ConvertToList(DataTable dt)
{

// 定义集合
List<T> ts = new List<T>();

// 获得此模型的类型
Type type = typeof(T);
//定义一个临时变量
string tempName = string.Empty;
//遍历DataTable中所有的数据行
foreach (DataRow dr in dt.Rows)
{
T t = new T();
// 获得此模型的公共属性
PropertyInfo[] propertys = t.GetType().GetProperties();
//遍历该对象的所有属性
foreach (PropertyInfo pi in propertys)
{
tempName = pi.Name;//将属性名称赋值给临时变量
//检查DataTable是否包含此列(列名==对象的属性名)
if (dt.Columns.Contains(tempName))
{
// 判断此属性是否有Setter
if (!pi.CanWrite) continue;//该属性不可写,直接跳出
//取值
object value = dr[tempName];
//如果非空,则赋给对象的属性
if (value != DBNull.Value)
{
if (pi.PropertyType.Name == "Guid")
pi.SetValue(t, Guid.Parse(value.ToString()), null);
else if (pi.PropertyType.Name == "string" || pi.PropertyType.Name == "String")
{
pi.SetValue(t, value.ToString(), null);
}
else
pi.SetValue(t, value, null);

}
}
}
//对象添加到泛型集合中
ts.Add(t);
}

return ts;

}

}

public class DT2Json
{
public static string DataTable2Json(DataTable dt)
{
StringBuilder jsonBuilder = new StringBuilder();
jsonBuilder.Append("{\"");
jsonBuilder.Append(dt.TableName);
jsonBuilder.Append("\":[");
for (int i = 0; i < dt.Rows.Count; i++)
{
jsonBuilder.Append("{");
for (int j = 0; j < dt.Columns.Count; j++)
{
jsonBuilder.Append("\"");
jsonBuilder.Append(dt.Columns[j].ColumnName);
jsonBuilder.Append("\":\"");
jsonBuilder.Append(dt.Rows[i][j].ToString());
jsonBuilder.Append("\",");
}
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
jsonBuilder.Append("},");
}
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
jsonBuilder.Append("]");
jsonBuilder.Append("}");
return jsonBuilder.ToString();
}
}

转载于:https://www.cnblogs.com/Bloghjb/p/9329610.html

datatable转化泛型相关推荐

  1. C#利用反射将Datatable转化为指定实体类ListT

    背景介绍 在软件开发中肯定免不了和数据库打交道,我们对数据的增删改查最终会转化为SQL在数据库中执行.从SQLServer中查出数据一般有两种方式:一是ADO.NET直接写SQL语句从数据中查出数据, ...

  2. 【机房收费个人版】DataTable 与泛型集合的较量

    将近三周的时间,我学到了很多知识,让我受益匪浅!也通过这三周的积累和整理,现在是时候写博客分享我的所知所得了..下面主要写DataTable.泛型集合以及它们之间的比较.. DataTable     ...

  3. [工具类]DataTable与泛型集合List互转

    写在前面 工作中经常遇到datatable与list,对于datatable而言操作起来不太方便.所以有的时候还是非常希望通过泛型集合来进行操作的.所以这里就封装了一个扩展类.也方便使用. 类 方法中 ...

  4. C#如何根据DataTable生成泛型List或者动态类型list

    背景:在项目中,sql语句检索返回DataTable,然后根据检索结果做进一步的操作,本篇文章即是介绍如何将DataTable快速生成泛型List返回. 假设存在如下学生类: 1 public cla ...

  5. C# CSV文件的导入导出以及datatable转化csv

    1.csv文件写入操作 首先,创建datatable对象: DataTable dt = new DataTable(); 添加列: dt.Columns.Add("name", ...

  6. 技术图文:如何实现 DataTable 与模型类 List 的相互转换?

    通常情况下,我们在做工程项目的时候,需要把待处理的数据存储在数据库中. 通过 SQL 的 Select 语句很容易把查询的结果以 DataTable 的方式得到,但在对 DateTable 中的数据进 ...

  7. 3,ORM组件XCode(简介)

    为什么80%的码农都做不了架构师?>>>    XCode是一个轻量级的ORM组件(对象与关系数据库映射),提供以面向对象的方式操作数据库的功能,能够解决90%以上的数据库操作场景. ...

  8. .NET分层登陆——机房收费系统再总结

    去年的时候,我写过一篇机房收费系统登陆的总结文章,那是站在VB的基础上,直接查询数据库实现的登陆.是非常初期的知识.假设想了解详情,请看VB查询数据库之登陆窗口--机房收费系统总结(一). 今天.我要 ...

  9. 【C#公共帮助类】10年代码,最全的系统帮助类

    这个帮助类主要包含:对象转换处理 .分割字符串.截取字符串.删除最后结尾的一个逗号. 删除最后结尾的指定字符后的字符. 生成指定长度的字符串. 生成日期随机码. 生成随机字母或数.字 截取字符长度. ...

最新文章

  1. 织梦dedecms如何快速使用拼音首字母做栏目名称
  2. 干货 | 加速AI发展!一文了解GPU Computing
  3. hdu2087 剪花布条 暴力/KMP
  4. python【Multiprocessing and threading】深入浅出多进程和多线程
  5. 0.项目运行环境和项目经理
  6. drupal 覆写登录框
  7. .Net Core3.0依赖注入DI
  8. mysql事务和非事物_mysql事务型与非事务型表1.8.5.3. 事务和原子操作
  9. Java 小记 — Spring Boot 的实践与思考,互联网 面试官 如何面试
  10. 苹果iPhone 12系列智能手机支持北斗卫星导航定位
  11. Mysql学习总结(58)——深入理解Mysql的四种隔离级别
  12. 《C和C++游戏趣味编程》 第8章 十步万度
  13. 喜马拉雅音频批量下载源码
  14. Java多线程面试知识点汇总(超详细总结)
  15. 大概都能懂的Eviews教程:二(转载)
  16. 【转载】正则表达式好文【30分钟教程】
  17. NLTK-004:加工原料文本
  18. elementUI动态菜单
  19. 计算机键盘重复,win7系统电脑键盘打字时总是出现重复字符的解决方法
  20. 基本数据类型的隐式转换

热门文章

  1. mysql集群重启offline_mysql集群搭建问题及解决方法集锦
  2. java中u怎么用_Java中interrupt的使用
  3. 以空格为分隔符读取内容给两个变量_问与答61: 如何将一个文本文件中满足指定条件的内容筛选到另一个文本文件中?...
  4. 《MySQL——事务》
  5. Opencv——几何空间变换(仿射变换和投影变换)
  6. 02.2-元素定位(XPath)
  7. java安卓写文件路径,如何使用gradle作为构建系统,平台Android配置Protobuf(Java)文件的输出路径?...
  8. ffplay的数据结构分析
  9. java get key_java如何获取String里面的键值对:key=valuekey=value
  10. flutter生成源代码_Flutter创建工程的主要代码详解