关于datatable序列化的事儿(代码片段)

吃饭睡觉敲代码 吃饭睡觉敲代码     2022-11-09     241

关键词:

今天写了一个小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 = 0;

            try
            

                count = Convert.ToInt32(dt.TableName);

            

            catch (System.Exception ex)
            

                count = dt.Rows.Count;

            

            string strReturn = "";

            if (count == 0)
            

                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(1);

            strJson = strJson.Insert(0, "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); ;

        
    

 

 

序列比对那点事儿(代码片段)

序列比对那点事儿2012-04-17 ~ ADMIN本来这应该是一本书,那样的话的确需要花一点心思,就写成一篇短文吧。从字符比对开始说起吧。第一个问题最简单,如何判断两个字符串是相等的。intstrcmp(constchar*s1,constchar*s2)intret=0;wh... 查看详情

mvc关于action返回结果类型的事儿(上)(代码片段)

一、ASP.NETMVC1.0Result几何?Action的返回值类型到底有几个?咱们来数数看。ASP.NETMVC1.0目前一共提供了以下十几种Action返回结果类型:1.ActionResult(base)2.ContentResult3.EmptyResult4.HttpUnauthorizedResult5.JavaScriptResult6.JsonResult7.FileResul 查看详情

算法零基础学习关于素数的那些事儿(代码片段)

文章目录关于素数用程序判定一个数是否是素数使用素数的定义优化一推荐题目筛选出n之内的所有素数枚举法埃氏筛📖核心思想👨‍💻代码推荐题目关于素数素数,又称为质数。它是指那些只包含1和它本身两... 查看详情

关于numpy的那点小事儿~~~(代码片段)

这玩意用了很多次,但每次用还是容易混淆,今天来总结mark一下~~~1.numpy.random.rand(d0,d1,...,dn)生成一个[0,1)之间的随机数或N维数组np.random.rand(2)#生成两个[0,1)之间的数[0.65557290.76240372]np.random.rand(2,2)#生成2行*2列的矩阵[[0.583602060.916... 查看详情

每日一博-java序列化一二事儿(代码片段)

文章目录whatWhy作用常用APIjava.io.Serializablejava.io.Externalizablejava.io.ObjectOutputStreamjava.io.ObjectInputStreamCode实现Serializable接口ObjectOutputStream#writeObject实现序列化ObjectInputStream#readObject方法实现反序 查看详情

关于跨域那些事儿(代码片段)

在工作中,难免会遇到跨域的问题,就像你高高兴兴的带着老婆吃着火锅,啊不对,是匆匆忙忙的在搬砖,突然浏览器告诉你跨域了,意不意外?既然遇到了,就只能解决他,平时一顿乱操作,也能解决问题,但一直没有好好的... 查看详情

关于docker那点事儿——dockerfile编写(代码片段)

Dockerfile编写前言一、Dockerfile创建镜像二、Dockerfile常用指令三、示例1、Dockerfile构建nginx镜像2、Dockerfile构建微服务四、CMD与ENTRYPOINT比较前言Dockerfile说白了就是构建镜像的一个文件。它里面描述了一条条的指令,每一条指令... 查看详情

笔记:关于链接库那点事儿(代码片段)

笔记:关于链接库那点事儿2021年7月31日根据《程序员的自我修养-链接、装载与库(潘爱民著)》整理1)总线。北桥:高速设备(内存,缓存,CPU,PCIbridge)。南桥:低速设备(磁盘,USB&#x... 查看详情

笔记:关于链接库那点事儿(代码片段)

笔记:关于链接库那点事儿2021年7月31日根据《程序员的自我修养-链接、装载与库(潘爱民著)》整理1)总线。北桥:高速设备(内存,缓存,CPU,PCIbridge)。南桥:低速设备(磁盘,USB&#x... 查看详情

笔记:关于链接库那点事儿(代码片段)

笔记:关于链接库那点事儿2021年7月31日根据《程序员的自我修养-链接、装载与库(潘爱民著)》整理1)总线。北桥:高速设备(内存,缓存,CPU,PCIbridge)。南桥:低速设备(磁盘,USB&#x... 查看详情

关于datatable组件使用(代码片段)

偶然发现一个叫dataTable 的组件,觉得很好用,于是研究了一番,下面是代码varlang= "sProcessing":"处理中...", "sLengthMenu":"每页_MENU_项", "sZeroRecords":"没有匹配结果 查看详情

关于数据标注行业有些你不知道的事儿(代码片段)

一位在觉醒向量做数据标注的员工说:正如别人评论的那样,我们的工作的确很像数字世界的建筑工人,但是我们在扮演着很重要的角色,因为没有我们,AI这栋摩天大楼就无法建成。大数据作为一个术语而言,其历史可能并不... 查看详情

关于docker那点事儿——dockercompose简介(代码片段)

dockercompose简介前言一、dockercompose概念二、dockercompose安装三、dockercompose常用命令四、docker-compose.yml文件详解1、文件结构2、示例:docker-compose管理微服务前言  微服务架构的应用系统一般包含若干个微服务,每个微服务... 查看详情

关于单元测试的那些事儿,mockito都能帮你解决(代码片段)

摘要:相信每一个程序猿在写UnitTest的时候都会碰到一些令人头疼的问题:如何测试一个rest接口;如何测试一个包含客户端调用服务端的复杂方法;如何测试一个包含从数据库读取数据的复杂方法。。。这些问题m... 查看详情

关于docker那点事儿——docker基础命令(代码片段)

文章目录前言一、docker安装docker配置文件详解二、常用docker命令1、dockerimage命令2、dockerrun命令3、常用命令三、docker网络1、docker修改默认网段2、不同宿主机下docker互通四、docker数据目录迁移前言官方文档:https://docs.docker.com... 查看详情

深入洞见:你所不知道的java对象序列化的5件事儿

关于Java对象序列化的一些有用的小知识不易理解,但对于解决Java编程挑战迟早有用。将Java对象序列化API它从一开始就存在于JDK1.1中。本文介绍的关于序列化的几件事情将说服您重新审视那些标准JavaAPI。Java序列化简介Java对象序... 查看详情

[vue]关于路由哪些事儿(代码片段)

什么是路由之前有个小伙伴面试被问到:面试官:不用vue能不能写单页面应用?答:用angular啊(咳咳,开个玩笑),答案确实是可以的,原生js中有个事件叫做onhashchange,可以在window对象上监听这个事件,通过触发事件动态加载... 查看详情

关于我在1024程序员节还在焊板子这件事儿(代码片段)

  一年一度1024,上次是周六,今年是周天。别人此刻在享受周末or整活儿,我却在忙着填坑调教pcb。  以前说过抽空做款ESP32的开发板,拖了这么久,来汇报下近况。  三世同堂先来一张。右下角的是老... 查看详情