using System.Data;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using System;
using System.Text; namespace es.Common
{
public class JsonParse : IDisposable
{
#region 释放资源
bool dis;
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (dis) return;
if (disposing)
dis = true;
}
~JsonParse() { Dispose(false); }
#endregion
/// <summary>
/// DataTable转换为json
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public string ToJson(DataTable dt)
{
if (dt != null && dt.Rows.Count > ) return JsonConvert.SerializeObject(dt, new DataTableConverter(), new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd" });
else return null;
}
/// <summary>
/// DataTable转换为json
/// </summary>
/// <param name="dt"></param>
/// <param name="format">时间格式:默认:“yyyy-MM-dd hh:mm:ss”</param>
/// <returns></returns>
public string ToJson(DataTable dt, string format)
{
format = string.IsNullOrEmpty(format) ? "yyyy-MM-dd hh:mm:ss" : format;
if (dt != null && dt.Rows.Count > ) return JsonConvert.SerializeObject(dt, new DataTableConverter(), new IsoDateTimeConverter { DateTimeFormat = format });
else return null;
}
/// <summary>
/// 表格形式转换为json
/// </summary>
/// <param name="dt"></param>
/// <param name="total"></param>
/// <returns></returns>
public string ToTablePage(DataTable dt, int total)
{
if (total > && dt.Rows.Count > ) return "{\"total\":" + total + ",\"content\":" + this.ToJson(dt) + "}";
else return null;
}
/// <summary>
/// layui框架table模块数据转换为json
/// </summary>
/// <param name="dt"></param>
/// <param name="count"></param>
/// <returns></returns>
public string ToLayuiTable(DataTable dt, int count)
{
if (count > && dt.Rows.Count > ) return "{\"code\":0,\"msg\":\"\",\"count\":" + count + ",\"data\":" + this.ToJson(dt) + "}";
else return "{\"code\":-1,\"msg\":\"没有符合条件的记录\",\"count\":0,\"data\":[]}";
}
/// <summary>
/// layui框架table模块数据转换为json
/// </summary>
/// <param name="dt"></param>
/// <param name="count"></param>
/// <param name="format"></param>
/// <returns></returns>
public string ToLayuiTable(DataTable dt, int count, string format)
{
if (count > && dt.Rows.Count > ) return "{\"code\":0,\"msg\":\"\",\"count\":" + count + ",\"data\":" + this.ToJson(dt, format) + "}";
else return "{\"code\":-1,\"msg\":\"没有符合条件的记录\",\"count\":0,\"data\":[]}";
}
/// <summary>
/// 获得带有children的json字符串,字段里必须有(id,pid)两个字段
/// </summary>
/// <param name="dt">DataTable</param>
/// <param name="id">父级id</param>
/// <returns></returns>
public string ToChildren(DataTable dt, int id)
{
if (dt != null && dt.Rows.Count > )
{
DataRow[] rows = dt.Select("pid=" + id);
if (rows.Length == ) return string.Empty;
StringBuilder str = new StringBuilder();
foreach (DataRow row in rows)
{
str.Append("{");
for (int i = ; i < row.Table.Columns.Count; i++)
{
if (row.Table.Columns[i].ColumnName != "pid")
{
if (i != ) str.Append(",");
str.Append("\"");
str.Append(row.Table.Columns[i].ColumnName);
str.Append("\":\"");
str.Append(row[i]);
str.Append("\"");
}
}
if (ToChildren(dt, (int)row["id"]).Length > )
{
str.Append(",\"children\":");
str.Append(ToChildren(dt, (int)row["id"]));
str.Append("},");
}
else
{
str.Append("},");
}
}
string json = str[str.Length - ] == ',' ? str.ToString(, str.Length - ) : str.ToString();
return "[" + json + "]";
}
else
{
return null;
}
}
}
}

JsonParse类的更多相关文章

  1. Java类的继承与多态特性-入门笔记

    相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...

  2. C++ 可配置的类工厂

    项目中常用到工厂模式,工厂模式可以把创建对象的具体细节封装到Create函数中,减少重复代码,增强可读和可维护性.传统的工厂实现如下: class Widget { public: virtual i ...

  3. Android请求网络共通类——Hi_博客 Android App 开发笔记

    今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...

  4. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  5. ASP.NET Core 折腾笔记二:自己写个完整的Cache缓存类来支持.NET Core

    背景: 1:.NET Core 已经没System.Web,也木有了HttpRuntime.Cache,因此,该空间下Cache也木有了. 2:.NET Core 有新的Memory Cache提供, ...

  6. .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类

    .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类 0x00 为什么要引入扩展方法 有的中间件功能比较简单,有的则比较复杂,并且依赖其它组件.除 ...

  7. Java基础Map接口+Collections工具类

    1.Map中我们主要讲两个接口 HashMap  与   LinkedHashMap (1)其中LinkedHashMap是有序的  怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...

  8. PHP-解析验证码类--学习笔记

    1.开始 在 网上看到使用PHP写的ValidateCode生成验证码码类,感觉不错,特拿来分析学习一下. 2.类图 3.验证码类部分代码 3.1  定义变量 //随机因子 private $char ...

  9. C# 多种方式发送邮件(附帮助类)

    因项目业务需要,需要做一个发送邮件功能,查了下资料,整了整,汇总如下,亲测可用- QQ邮箱发送邮件 #region 发送邮箱 try { MailMessage mail = new MailMess ...

随机推荐

  1. spring boot拦截器

    实现自定义拦截器只需要3步: 1.创建我们自己的拦截器类并实现 HandlerInterceptor 接口. 2.创建一个Java类继承WebMvcConfigurerAdapter,并重写 addI ...

  2. Hibernate学习---第十一节:Hibernate之数据抓取策略&批量抓取

    1.hibernate 也可以通过标准的 SQL 进行查询 (1).将SQL查询写在 java 代码中 /** * 查询所有 */ @Test public void testQuery(){ // ...

  3. java--xml文件读取(SAX)

    SAX解析原理: 使用Handler去逐个分析遇到的每一个节点 SAX方式解析步奏: 创建xml解析需要的handler(parser.parse(file,handler)) package com ...

  4. BEC listen and translation exercise 41

    Its advantages are that it can be used for outside activities So my recommendation I'm afraid would ...

  5. linux vsftpd 服务配置

    vsftpd.conf配置如下: # Example config file /etc/vsftpd/vsftpd.conf # # The default compiled in settings ...

  6. Sublime 实践

    1.下载开发版:http://www.sublimetext.com/dev 2.安装Package control: (1)按键ctrl+~ (2)在命令行中输入:  import urllib2, ...

  7. ThinkPHP5.1的公共函数

    最初使用ThinkPHP3.2.3的时候,我们自己定义的公共函数常常放置于 \Common\function.php ThinkPHP5.1 公共函数 项目公用的会放在 \application\co ...

  8. CSS3 日常小结

    1. pointer-events:none; 2. flex 今天看到一个牛X的CSS3属性 flex, 称为弹性盒子.  这中属性完全可以替代媒体查询啦 使用方法: 父元素使用属性display ...

  9. JVM插码之三:javaagent介绍及javassist介绍

    本文介绍一下,当下比较基础但是使用场景却很多的一种技术,稍微偏底层点,就是字节码插庄技术了...,如果之前大家熟悉了asm,cglib以及javassit等技术,那么下面说的就很简单了...,因为下面 ...

  10. js之翻牌游戏中的一个深刻感悟

    先“上菜”: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...