public class JSON

{

public static string DateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss";

public static string Encode(object o)

{

  if (o == null || o.ToString() == "null") return null;

   if (o != null && (o.GetType() == typeof(String) || o.GetType() == typeof(string)))

{

      return o.ToString();

    }             

IsoDateTimeConverter dt = new IsoDateTimeConverter();

dt.DateTimeFormat = DateTimeFormat;

return JsonConvert.SerializeObject(o, dt);

}

public static object Decode(string json)
        {
            if (String.IsNullOrEmpty(json)) return "";
            object o = JsonConvert.DeserializeObject(json);
            if (o.GetType() == typeof(String) || o.GetType() == typeof(string))
            {
                o = JsonConvert.DeserializeObject(o.ToString());
            }
            object v = toObject(o);
            return v;
        }

public static object Decode(string json, Type type)

{

return JsonConvert.DeserializeObject(json, type);

}

private static object toObject(object o)

{

  if (o == null) return null;

if (o.GetType() == typeof(string))

     {

       //判断是否符合2010-09-02T10:00:00的格式

      string s = o.ToString();

       if (s.Length == 19 && s[10] == 'T' && s[4] == '-' && s[13] == ':')

          {

           o = System.Convert.ToDateTime(o);

                }

        }   else if (o is JObject)

              {

            JObject jo = o as JObject;  

          Hashtable h = new Hashtable();

       foreach (KeyValuePair<string, JToken> entry in jo)

                  {

                 h[entry.Key] = toObject(entry.Value);

                      }  

                o = h;             

          } else if (o is IList)

                    {

          ArrayList list = new ArrayList();

                         list.AddRange((o as IList));

                        int i = 0, l = list.Count;

                        for (; i < l; i++)

               {

                  list[i] = toObject(list[i]);

                          }

                o = list;

          } else if (typeof(JValue) == o.GetType())

                   {

                     JValue v = (JValue)o;

                     o = toObject(v.Value);

                  }else {

                            }

                     return o;

}

public static ArrayList DataTable2ArrayList(DataTable data)

{

ArrayList array = new ArrayList();

for (int i = 0; i < data.Rows.Count; i++)

{

DataRow row = data.Rows[i];

Hashtable record = new Hashtable();

for (int j = 0; j < data.Columns.Count; j++)

{

object cellValue = row[j];

if (cellValue.GetType() == typeof(DBNull))

{

cellValue = null;

}

record[data.Columns[j].ColumnName] = cellValue;

}

array.Add(record);

}

return array;

}

/// <summary>

/// 将一个DataTable 转为一个JSON

/// </summary>

/// <param name="dt"></param>

/// <returns></returns>

public static string DataTable2Json(DataTable dt)

{

if (dt == null)

{

return "";

}

ArrayList dataAll = DataTable2ArrayList(dt);

ArrayList data = new ArrayList();

for (int i = 0, l = dataAll.Count; i < l; i++)

{

Hashtable record = (Hashtable)dataAll[i];

if (record == null) continue;

data.Add("'" + record + "'");

}

Hashtable result = new Hashtable();

result["data"] = data;

result["total"] = dataAll.Count;

return JSON.Encode(dt);

}

/// <summary>

/// 通过一个datatable 返回一个json字符串

/// </summary>

/// <param name="dt">按条件的datatable(分页内的列表)</param>

/// <param name="AllCount">datatable的总条数(分页时的总记录)</param>

/// <returns></returns>

public static string DataTable2Json(DataTable dt, int AllCount)

{

if (dt == null)

{

return "";

}

ArrayList dataAll = DataTable2ArrayList(dt);

//实现一个内存分页(实际应该使用SQL分页)

ArrayList data = new ArrayList();

for (int i = 0, l = dataAll.Count; i < l; i++)

{

Hashtable record = (Hashtable)dataAll[i];

if (record == null) continue;

data.Add(record);

}

Hashtable result = new Hashtable();

result["data"] = data;

result["total"] = AllCount;

return JSON.Encode(result);

}

/// <summary>

/// 通过一个datatable 返回一个json字符串

/// </summary>

/// <param name="dt">按条件的datatable(分页内的列表)</param>

/// <param name="AllCount">datatable的总条数(分页时的总记录)</param>

/// <returns></returns>

public static string DataTable2Json(DataTable dt, int AllCount, Hashtable hashtable)

{

if (dt == null)

{

return "";

}

ArrayList dataAll = DataTable2ArrayList(dt);

//实现一个内存分页(实际应该使用SQL分页)

ArrayList data = new ArrayList();

for (int i = 0, l = dataAll.Count; i < l; i++)

{

Hashtable record = (Hashtable)dataAll[i];

if (record == null) continue;

data.Add(record);

}

Hashtable result = new Hashtable();

result = hashtable;

result["data"] = data;

result["total"] = AllCount;

return JSON.Encode(result);

}

/// <summary>
        /// 分页
        /// </summary>
        /// <param name="data">表dt</param>
        /// <param name="pageIndex">当前页索引</param>
        /// <param name="pageSize">每页的数目</param>
        /// <param name="pageCount">总数目</param>
        /// <returns></returns>
        public static DataTable dt2newdt(DataTable data, int pageIndex, int pageSize, int pageCount)
        {
            DataView dv = data.DefaultView;
            DataTable dt = dv.Table.Clone();
            for (int i = pageIndex * pageSize; i < (pageIndex + 1) * pageSize; i++)
            {
                if (i == pageCount)
                {
                    break;
                }
                dt.ImportRow(dv[i].Row);
            }
            return dt;
        }

}

JSON格式互转集合 (2)的更多相关文章

  1. JSON格式互转集合

    在工作中我们经常会遇到格式转换的问题,有的时候是将JSON转换成DataTable.DataSet或是List等,也有可能将DataTable.DataSet或是List转换成JSON的,抽了点时间把 ...

  2. ABAP内表数据和JSON格式互转

    本程序演示ABAP内表数据如何转为JSON格式,以及JSON数据如何放入内表. 注:json字符串格式如:jsonstr = '[ {flag: "0",message: &quo ...

  3. xml与json格式互转

    最近要整一些报文测试的事情,可当前项目的请求报文格式却不统一,有XML也有JSON,为了一致性,决定统一用JSON格式处理. xmltodict : Makes working with XML fe ...

  4. postman做接口测试 application/x-www-form-urlencoded 格式与json格式互转

    背景:用postman做接口测试可以使用application/x-www-form-urlencoded请求,也可以使用json请求,接口文档如下: 请求参数 字段 类型 是否必填 注释 websi ...

  5. 通过http协议发送json格式请求并解析

    本人初入门径.代码略显粗糙,欢迎指点改正! 最近在做公司的项目的时候,需要和其他公司进行业务上的对接,对方直接扔过来一个协议用来开发,最近稍微看了一下,写了一个通过协议获取数据的方法 对方的协议内容部 ...

  6. JSon_零基础_008_将JSon格式的"数组"字符串转换为List集合

    将JSon格式的"数组"字符串转换为List集合. 应用此技术从一个json对象字符串格式中得到一个java对应的对象. JSONObject是一个“name.values”集合, ...

  7. JSon_零基础_005_将po(bean)对象集合List转换为JSon格式的对象字符串,返回给界面

    将po(bean)对象集合List转换为JSon格式的对象字符串,返回给界面 导入jar包: 编写:po(bean)代码: package com.west.webcourse.po; /** * 第 ...

  8. JSon_零基础_004_将Set集合对象转换为JSon格式的对象字符串,返回给界面

    将Set集合对象转换为JSon格式的对象字符串,返回给界面 需要导入的jar包: 编写:servlet: package com.west.webcourse.servlet; import java ...

  9. JSon_零基础_003_将Map集合对象转换为JSon格式的对象字符串,返回给界面

    将Map集合对象转换为JSon格式的对象字符串,返回给界面 需导入的jar包: 编写servlet: package com.west.webcourse.servlet; import java.i ...

随机推荐

  1. python3 django项目从项目中导出依赖包

    1. 在项目的根目录中使用mac终端执行命令, pip3 freeze > requirements.txt #requirements.txt只是个名字可以随便起,一般默认为requireme ...

  2. 设计模式----外观(facade)模式

    外观(facade)模式外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用.uml图

  3. ThinkPHP使用smarty模板引擎的方法

    ThinkPHP支持多种php模板引擎,可以根据个人需要加以配置.下面我们以Smarty模板引擎为例,给大家说说具体的操作流程! 首先去Smarty官网上下载一个Smarty.本站下载地址:http: ...

  4. linux挂载iscsi出现的问题

    挂载的时候我们可以使用永久挂载但是这里我们就需要注意了正常的永久挂载可能会导致系统起不来因为这里我们使用的是服务端的硬盘为网络设备而开机的读取中 会先读取/etc/fstab下的内容 之后再读取网络的 ...

  5. django.template.exceptions.TemplateDoesNotExist: index.html

    django.template.exceptions.TemplateDoesNotExist: index.html 在网上查了下,setting中 TEMPLATES 的 'DIRS' 需要添加o ...

  6. 将python包发布到PyPI和制作whl文件

    参考链接:wheel和egg的不同怎样将自己写的包传达到PyPi发布你自己的轮子 - PyPI打包上传实践PyPI官网上传包教程 wheel文件Wheel和Egg都是python的打包格式,目的是支持 ...

  7. Flutter 底部的renderflex溢出

    一开始直接使用Scaffold布局,body:new Column  然后模拟器会提示捕获异常: 然后百度了一下Flutter的溢出问题,发现解决办法是使用SingleChildScrollView包 ...

  8. Java工程师学习指南第6部分:深入理解JVM虚拟机

    本文整理了微信公众号[Java技术江湖]发表和转载过的JVM虚拟机相关优质文章,想看到更多Java技术文章,就赶紧关注本公众号吧吧. JVM原理分析,看了都说好 JVM 深入学习:Java 解析 Cl ...

  9. CRLF——http response 拆分攻击(webgoat)

    0x01 什么是CRLF CRLF是“回车+换行”(\r和\n)/(%0d和%0a)的简称. CRLF利用: 正常输入的请求中加入恶意代码,控制HTTP响应header中的字符(Location,Se ...

  10. HDU3191 【输出次短路条数】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3191 How Many Paths Are There Time Limit: 2000/1000 M ...