C#DataTable(转List /JSON/字典 互转)
1 #region 数据表DataTable 转键值对集合 List
2 /// <summary>
3 /// 数据表DataTable 转键值对集合 List
4 /// 把DataTable转成 List集合, 存每一行
5 /// 集合中放的是键值对字典,存每一列
6 /// </summary>
7 /// <param name="dt">数据表</param>
8 /// <returns>哈希表数组</returns>
9 public static List<Dictionary<string, object>> DataTableToList(DataTable dt)
10 {
11 List<Dictionary<string, object>> list
12 = new List<Dictionary<string, object>>();
13
14 foreach (DataRow dr in dt.Rows)
15 {
16 Dictionary<string, object> dic = new Dictionary<string, object>();
17 foreach (DataColumn dc in dt.Columns)
18 {
19 dic.Add(dc.ColumnName, dr[dc.ColumnName]);
20 }
21 list.Add(dic);
22 }
23 return list;
24 }
25 #endregion
26
27 #region 数据集转键值对数组字典
28
29 /// <summary>
30 /// 数据集转键值对数组字典
31 /// </summary>
32 /// <param name="dataSet">数据集</param>
33 /// <returns>键值对数组字典</returns>
34 public static Dictionary<string, List<Dictionary<string, object>>> DataSetToDic(DataSet ds)
35 {
36 Dictionary<string, List<Dictionary<string, object>>> result = new Dictionary<string, List<Dictionary<string, object>>>();
37
38 foreach (DataTable dt in ds.Tables)
39 result.Add(dt.TableName, DataTableToList(dt));
40
41 return result;
42 }
43 #endregion
44
45 #region 数据表Tables 转JSON
46 /// <summary>
47 /// 数据表转Tables JSON
48 /// </summary>
49 /// <param name="dataTable">数据表</param>
50 /// <returns>JSON字符串</returns>
51 public static string DataTableToJSON(DataTable dt)
52 {
53 return JsonHelper.ObjectToJSON(DataTableToList(dt));
54 }
55 #endregion
56
57 #region 将datatable转换为json
58 /// <summary>
59 /// 将datatable转换为json
60 /// </summary>
61 /// <param name="dtb">Dt</param>
62 /// <returns>JSON字符串</returns>
63 public static string Dtb2Json(DataTable dtb)
64 {
65 //JavaScriptSerializer jss = new JavaScriptSerializer();
66
67 System.Collections.ArrayList dic = new System.Collections.ArrayList();
68
69 foreach (DataRow dr in dtb.Rows)
70 {
71 System.Collections.Generic.Dictionary<string, object> drow = new System.Collections.Generic.Dictionary<string, object>();
72
73 foreach (DataColumn dc in dtb.Columns)
74 {
75 drow.Add(dc.ColumnName, dr[dc.ColumnName]);
76 }
77
78 dic.Add(drow);
79 }
80
81 return null;
82 }
83 #endregion
84
85 #region 将Dictionary转换为数据表数据 Tables
86 public static DataTable DictToDataTable(Dictionary<string, object> dict)
87 {
88 DataTable dt = new DataTable();
89
90 //dt.Columns.Add("ID", typeof(Guid));
91 //dt.Columns.Add("DID", typeof(string));
92 //dt.Columns.Add("DEPARTMENTNUM", typeof(string));
93 //dt.Columns.Add("DEPARTMENTNAME", typeof(string));
94 //dt.Columns.Add("REMARKS", typeof(string));
95
96 foreach (var colName in dict.Keys)
97 {
98 dt.Columns.Add(colName, typeof(string));
99 }
100 DataRow dr = dt.NewRow();
101 foreach (KeyValuePair<string, object> item in dict)
102 {
103 dr[item.Key] = item.Value;
104 }
105 dt.Rows.Add(dr);
106 return dt;
107 }
108 #endregion
109
110 #region 将List转换为数据表数据 Tables
111 /// <summary>
112 /// List转DataTable
113 /// </summary>
114 public static DataTable ListToDataTable<T>(List<T> list)
115 {
116 if (list == null || list.Count == 0)
117 {
118 return new DataTable();
119 }
120
121 //获取T下所有的属性
122 Type entityType = list[0].GetType();
123 PropertyInfo[] entityProperties = entityType.GetProperties();
124
125 DataTable dt = new DataTable("data");
126
127 for (int i = 0; i < entityProperties.Length; i++)
128 {
129 dt.Columns.Add(entityProperties[i].Name);
130 }
131
132 foreach (var item in list)
133 {
134 if (item.GetType() != entityType)
135 {
136 throw new Exception("要转换集合元素类型不一致!");
137 }
138 //创建一个用于放所有属性值的数组
139 object[] entityValues = new object[entityProperties.Length];
140 for (int i = 0; i < entityProperties.Length; i++)
141 {
142 entityValues[i] = entityProperties[i].GetValue(item, null);
143 }
144
145 dt.Rows.Add(entityValues);
146 }
147 return dt;
148 }
149 #endregion
150
151 #region Json 字符串 转换为 DataTable数据集合 简要版,正在使用中
152 /// <summary>
153 /// Json 字符串 转换为 DataTable数据集合 简要版,正在使用中
154 /// </summary>
155 /// <param name="json"></param>
156 /// <returns></returns>
157 ///
158 //格式;
159 //[{"mac":"20:f1:7c:c5:cd:80","rssi":"-86","ch":"9"},{"mac":"20:f1:7c:c5:cd:85","rssi":"-91","ch":"9"}]
160 public static DataTable ToDataTableTwo(string json)
161 {
162 DataTable dataTable = new DataTable(); //实例化
163 DataTable result;
164 try
165 {
166 List<Dictionary<string, object>> arrayList = JsonHelper.JSONToObject<List<Dictionary<string, object>>>(json);
167
168 if (arrayList != null && arrayList.Count > 0)
169 {
170 foreach (Dictionary<string, object> dictionary in arrayList)
171 {
172 if (dictionary.Keys.Count == 0)
173 {
174 result = dataTable;
175 return result;
176 }
177
178 //Columns
179 if (dataTable.Columns.Count == 0)
180 {
181 foreach (var current in dictionary)
182 {
183 if (current.Value != null)
184 {
185 dataTable.Columns.Add(current.Key, current.Value.GetType());
186 }
187 else
188 {
189 dataTable.Columns.Add(current.Key);
190 }
191 }
192 }
193
194 //Rows
195 DataRow dataRow = dataTable.NewRow();
196
197 foreach (string current in dictionary.Keys)
198 {
199 if (dictionary[current] != null)
200 {
201 dataRow[current] = dictionary[current];
202 }
203 }
204
205 dataTable.Rows.Add(dataRow); //循环添加行到DataTable中
206 }
207 }
208 }
209 catch (Exception ex)
210 {
211 throw ex;
212 }
213
214 result = dataTable;
215 return result;
216 }
217 #endregion
C#DataTable(转List /JSON/字典 互转)的更多相关文章
- DataTable 和Json 字符串互转
#region DataTable 转换为Json字符串实例方法 /// <summary> /// GetClassTypeJosn 的摘要说明 /// </summary> ...
- 二:C#对象、集合、DataTable与Json内容互转示例;
导航目录: Newtonsoft.Json 概述 一:Newtonsoft.Json 支持序列化与反序列化的.net 对象类型: 二:C#对象.集合.DataTable与Json内容互转示例: ...
- 将DataSet(DataTable)转换成JSON格式(生成JS文件存储)
public static string CreateJsonParameters(DataTable dt) { /**/ /**/ /**/ /* /*********************** ...
- Datatable转成Json方式两则
1, Asp.net C# 使用Newtonsoft.Json 实现DataTable转Json格式数据 1.这里下载:http://www.newtonsoft.com/products/json/ ...
- LINQ查询返回DataTable类型[轉]與将DataTable序列化为Json格式【轉】
(原文地址:http://xuzhihong1987.blog.163.com/blog/static/26731587201101853740294/) LINQ查询返回DataTable类型 在使 ...
- DataTable 转换成 Json的3种方法
在web开发中,我们可能会有这样的需求,为了便于前台的JS的处理,我们需要将查询出的数据源格式比如:List<T>.DataTable转换为Json格式.特别在使用Extjs框架的时候,A ...
- asp.net dataTable转换成Json格式
/// <summary> /// dataTable转换成Json格式 /// </summary> /// <param name="dt"> ...
- Datatable/Dataset 转 JSON方法
当数据库表的数据在一般处理程序中查出来需要将这个表数据返回到前台的jquery中,需要将数据拼成json字符串形式,这里是将数据库数据查出放在Datatable中,然后在一般处理程序中将datatab ...
- DataTable转换成json字符串
将DataTable里面的行转换成json字符串方法: #region DataTable转为json /// <summary> /// DataTable转为json /// < ...
- JSON格式互转集合
在工作中我们经常会遇到格式转换的问题,有的时候是将JSON转换成DataTable.DataSet或是List等,也有可能将DataTable.DataSet或是List转换成JSON的,抽了点时间把 ...
随机推荐
- 【炫丽】从0开始做一个WPF+Blazor对话小程序
大家好,我是沙漠尽头的狼. .NET是免费,跨平台,开源,用于构建所有应用的开发人员平台. 本文演示如何在WPF中使用Blazor开发漂亮的UI,为客户端开发注入新活力. 注 要使WPF支持Blazo ...
- KatalonRecorder系列(一):基本使用+XPath元素定位
一.简介 Katalon Recorder是基于selenium的浏览器插件,支持火狐和chrome.可以录制web上的操作并回放,还能导入导出脚本. 二.安装 可在谷歌商店或者火狐附件组件中搜索并选 ...
- PHP使用PHPmailer类和smtp发送邮件
开启邮件smtp服务 设置授权码 引入phpmailer类,smtp类本地下载https://github.com/PHPMailer/PHPMailer //下载PHPMailer并开启php_op ...
- 面试官不按套路,竟然问我Java线程池是怎么统计线程空闲时间?
背景介绍: 你刚从学校毕业后,到新公司实习,试用期又被毕业,然后你又不得不出来面试,好在面试的时候碰到个美女面试官! 面试官: 小伙子,我看你简历上写的项目中用到了线程池,你知道线程池是怎样实现复用线 ...
- DHorse系列文章之maven打包
插件打包 这种方式是平时最常用的,首先要下载并安装maven环境,然后在被打包的项目中引入插件,有各种各样的打包插件,比如springboot自带插件: <plugin> <grou ...
- vscode 更新后重启恢复旧版
vscode的自动更新自动安装在C:\Users\admin\AppData\Local\,如果之前的vscode不在默认位置,就会更新出两个版本,如果还用了固定在开始屏幕或者任务栏,则一直在打开旧版 ...
- 【JUC】循环屏障CyclicBarrier详解
欢迎关注专栏[JAVA并发] 前言 jdk中提供了许多的并发工具类,大家可能比较熟悉的有CountDownLatch,主要用来阻塞一个线程运行,直到其他线程运行完毕.而jdk还有一个功能类似并发工具类 ...
- 从稍微懂一点开始的C++学习之路1: 智能指针
从稍微懂一点开始的C++学习之路1 智能指针 因为之前一直是搞qt的,没有搞过纯c++,所以现在算得上是刚开始学纯C++.C++的大部分语法其实我都懂,主要的是一些规范,还有内存回收等一些细节地方纯C ...
- 08-通用Service接口
MP也为我们提供了Service层的实现,我们只需要编写一个接口,继承IService, 并创建一个接口实现类继承ServiceImpl,即可使用 基本使用 改造前 定义接口 public inter ...
- 【转载】SQL Server FileStream 体验
FileStream是SQL Server 2008提供的新特性,之前附件在SQL的存储一种是直接放数据库,一种是存储一个路径,附件单独放在磁盘上.前一种方法会使数据库空间更快变大,而且读写占用较多数 ...