关于DataTable序列化的事儿
今天写了一个小demo,从数据库中读取到了dataTable,想序列化成json字符串,然后传到前端,进行页面展示,其实很简单的一个步骤,谁知道它出错了!!!
出错的原因是:序列化类型为XX的对象时检测到循环引用,然后百度了一下,有好多解决方案,我没有一一去试,写这个主要记录一下我找到的解决的办法。
链接:http://xuzhihong1987.blog.163.com/blog/static/26731587201101913722238/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Web.Script.Serialization; namespace Common
{
public class ConventDataTableToJson
{
/// <summary> /// 序列化方法(带分页) /// </summary> /// <param name="dt"></param> /// <returns></returns> public static string Serialize(DataTable dt)
{ List<Dictionary<string, object>> list = new List<Dictionary<string, object>>(); foreach (DataRow dr in dt.Rows)
{ Dictionary<string, object> result = new Dictionary<string, object>(); foreach (DataColumn dc in dt.Columns)
{ result.Add(dc.ColumnName, dr[dc].ToString()); } list.Add(result); } int count = ; try
{ count = Convert.ToInt32(dt.TableName); } catch (System.Exception ex)
{ count = dt.Rows.Count; } string strReturn = ""; if (count == )
{ strReturn = "{\"totalCount\":0,\"data\":[]}"; } else
{ strReturn = ConventToJson(list, count); } return strReturn; } /// <summary> /// 转换为JSON对象 /// </summary> /// <returns></returns> public static string ConventToJson<T>(List<T> list, int count)
{ JavaScriptSerializer serializer = new JavaScriptSerializer(); string strJson = serializer.Serialize(list); strJson = strJson.Substring(); strJson = strJson.Insert(, "{totalCount:" + count + ",data:["); strJson += "}"; return strJson; } /// <summary> /// 不需要分页 /// </summary> /// <param name="dt"></param> /// <param name="flag">false</param> /// <returns></returns> public static string Serialize(DataTable dt, bool flag)
{ JavaScriptSerializer serializer = new JavaScriptSerializer(); List<Dictionary<string, object>> list = new List<Dictionary<string, object>>(); foreach (DataRow dr in dt.Rows)
{ 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); ; }
}
}
关于DataTable序列化的事儿的更多相关文章
- DataTable序列化
DataTable是复杂对象,无法直接序列化,必须通过其他的方式来实现 下面介绍一下常用的几种方式 1.先转换为List,再序列化List 下面是DataTable转换为List的方法 protect ...
- DataTable序列化及反序列化Json
添加Json解析引用 using Newtonsoft.Json; 实现方式一:普通转换 private void button1_Click(object sender, EventArgs e) ...
- 【ASP.NET】DataTable序列化
问题描述 主要解决DataTable数据转化为JSON,从Controller传递数据给View的问题. 1 内容区 提供如下方法,仅供参考 public static class ObjectE ...
- c# DataTable 序列化json
if (ds.Tables[0].Rows.Count != 0) { var list = GetJsonString(ds ...
- 使用JavaScriptSerializer序列化集合、字典、数组、DataTable为JSON字符串 分类: 前端 数据格式 JSON 2014-10-30 14:08 169人阅读 评论(0) 收藏
一.JSON简介 JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式. JSON是"名值对"的集合.结构由大 ...
- DataTable的序列化和反序列化
/// <summary> /// DataTable序列化 /// </summary> /// <param name="dt"></ ...
- WebService返回DataTable
http://blog.csdn.net/wxnjob/article/details/8638420 webservice返回datatable时报序列化错误 以下三种方案的实质应该都是序列化的,有 ...
- Open_Newtonsoft_Json 的序列化和反序列化
Newtonsoft.Json,一款.NET中开源的Json序列化和反序列化类库(下载地址http://json.codeplex.com/). 特别注明:本人转自 陈 晨 博客园的 Newtonso ...
- 反射小应用之DataTable和List<T>互操作
在程序中,往往会遇到一些小情况,就是数据库取出来的时候为了方便直接将数据通过存储在DataSet或DataTable中,这样做的一个后果是在日后的的对数据进行”细“操作时,就发现它可能没有List&l ...
随机推荐
- OpenCV初步
目录 一 写在开头 1.1 本文内容 二 涉及的API 三 OpenCV 3.4.2在Ubuntu 16.04 LTS下的编译安装 四 OpenCV安装测试与图像的加载和显示 4.1 安装测试 4.2 ...
- ES6.3.2 index操作源码流程
ES 6.3.2 index 操作源码流程 client 发送请求 TransportBulkAction#doExecute(Task,BulkRequest,listener) 解析请求,是否要自 ...
- 20155324 实验5 MSF基础应用
20155324 实验5 MSF基础应用 ms08_067 用search命令,搜索与ms08_067相关的模块,如图: 服务器信息块(SMB)是一个网络文件共享协议,它允许应用程序和终端用户从远端的 ...
- Python的安装及小程序练习
Python 1.Python的安装教程 (1)进入Python官网 (2)双击Python-3.6.4.exe安装程序,勾选Add Python 3.6 to PATH (3)选择自定义安装. (4 ...
- lambda+mutable配合move实现单函数多程序域
主代码 //-----------------------------------说明一的代码 void fun0{ int t = 10; auto loopFun = [=]() mutable{ ...
- 查看变更(git diff)
git diff命令 如果想要知道变更的具体内容,可以使用git diff命令.它被用来解决两个问题: 哪些变更还没有被暂存? 那些已暂存的变更正待提价? git diff在git status基础上 ...
- poj2689 Prime Distance题解报告
题目戳这里 [题目大意] 给定一个区间[L,R],求区间内的质数相邻两个距离最大和最小的. [思路分析] 其实很简单呀,很明显可以看出来是数论题,有关于质数的知识. 要注意一下的就是L和R的数据范围都 ...
- Python:正则表达式(一):search()、match()、findall() 的区别
以前一直觉得正则很难,不会用,今天试验了几个方法,整理总结了一下,简洁明了. 简单来讲,正则就是 提取一段特征数据,用(.*?)代替. 自己总结的特点&区别: (.*) 贪婪匹配,会尽可能的往 ...
- Jmeter、Postman 、 loadrunner SoapUI 接口测试工具
一. loadrunner 简称 LR 二. Jmeter 1.安装包:apache-jmeter-4.0.tgz 解压.学会此工具的使用 和POSTman 一样的. 2.本机测试:双击apa ...
- 2019前端面试题之js
1.js的数据类型 js的数据类型分为基本类型跟引用类型 基本数据类型(5个):undefined,boolean,number,string,null.基本类型的访问是按值访问的,就是说你可以操作保 ...