DataTable的序列化和反序列化
/// <summary>
/// DataTable序列化
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static string SerializeDataTable(DataTable dt)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
List<Dictionary<string, object>> list = new List<Dictionary<string, object>>();
foreach (DataRow dr in dt.Rows)//每一行信息,新建一个Dictionary<string,object>,将该行的每列信息加入到字典
{
Dictionary<string, object> result = new Dictionary<string, object>();
foreach (DataColumn dc in dt.Columns)
{
result.Add(dc.ColumnName, dr[dc].ToString());
}
list.Add(result);
}
return serializer.Serialize(list);//调用Serializer方法
}
/// <summary>
/// DataTable反序列化
/// </summary>
/// <param name="strJson"></param>
/// <returns></returns>
public static DataTable DeserializerTable(string strJson)
{
DataTable dt = new DataTable();
JavaScriptSerializer serializer = new JavaScriptSerializer();
ArrayList arralList = serializer.Deserialize<ArrayList>(strJson);//反序列化ArrayList类型
if (arralList.Count > 0)//反序列化后ArrayList个数不为0
{
foreach (Dictionary<string, object> row in arralList)
{
if (dt.Columns.Count == 0)//新建的DataTable中无任何信息,为其添加列名及类型
{
foreach (string key in row.Keys)
{
dt.Columns.Add(key, row[key].GetType());//添加dt的列名
}
}
DataRow dr = dt.NewRow();
foreach (string key in row.Keys)//讲arrayList中的值添加到DataTable中
{
dr[key] = row[key];//添加列值
}
dt.Rows.Add(dr);//添加一行
}
}
return dt;
}
最新文章
- 编译系统中BNF: Backus-Naur Form
- AlwaysON同步的原理及可用模式
- SPOJ 694. Distinct Substrings (后缀数组不相同的子串的个数)转
- php 实现 jsonp 数据接口
- Python3 学习第三弹:异常情况如何处理?
- java RSA加密解密--转载
- javascript笔记02:严格模式的特定要求
- eclipse 导入tomcat7源码
- ELK日志框架(2):log4net.ElasticSearch+ Kibana实现日志记录和显示
- Android笔记: ViewPager基本用法
- Android .9.png 的介绍
- 探讨.NET Core数据进行3DES加密和解密问题
- 「洛谷5283」「LOJ3048」「十二省联考2019」异或粽子【可持久化01trie+优先队列】
- web.xml中使用web前缀配置无法访问controller
- 在idea中不出现大波浪的设置
- Java第04次实验提纲(面向对象2-继承、多态、抽象类与接口)
- Jquery 获取对象的几种方式(转载)
- Android检查设备是否可以访问互联网,判断Internet连接,测试网络请求,解析域名
- JavaScript arguments对象详解
- HDU 1548 A strange lift (Dijkstra)