JSON格式互转集合 (2)
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)的更多相关文章
- JSON格式互转集合
在工作中我们经常会遇到格式转换的问题,有的时候是将JSON转换成DataTable.DataSet或是List等,也有可能将DataTable.DataSet或是List转换成JSON的,抽了点时间把 ...
- ABAP内表数据和JSON格式互转
本程序演示ABAP内表数据如何转为JSON格式,以及JSON数据如何放入内表. 注:json字符串格式如:jsonstr = '[ {flag: "0",message: &quo ...
- xml与json格式互转
最近要整一些报文测试的事情,可当前项目的请求报文格式却不统一,有XML也有JSON,为了一致性,决定统一用JSON格式处理. xmltodict : Makes working with XML fe ...
- postman做接口测试 application/x-www-form-urlencoded 格式与json格式互转
背景:用postman做接口测试可以使用application/x-www-form-urlencoded请求,也可以使用json请求,接口文档如下: 请求参数 字段 类型 是否必填 注释 websi ...
- 通过http协议发送json格式请求并解析
本人初入门径.代码略显粗糙,欢迎指点改正! 最近在做公司的项目的时候,需要和其他公司进行业务上的对接,对方直接扔过来一个协议用来开发,最近稍微看了一下,写了一个通过协议获取数据的方法 对方的协议内容部 ...
- JSon_零基础_008_将JSon格式的"数组"字符串转换为List集合
将JSon格式的"数组"字符串转换为List集合. 应用此技术从一个json对象字符串格式中得到一个java对应的对象. JSONObject是一个“name.values”集合, ...
- JSon_零基础_005_将po(bean)对象集合List转换为JSon格式的对象字符串,返回给界面
将po(bean)对象集合List转换为JSon格式的对象字符串,返回给界面 导入jar包: 编写:po(bean)代码: package com.west.webcourse.po; /** * 第 ...
- JSon_零基础_004_将Set集合对象转换为JSon格式的对象字符串,返回给界面
将Set集合对象转换为JSon格式的对象字符串,返回给界面 需要导入的jar包: 编写:servlet: package com.west.webcourse.servlet; import java ...
- JSon_零基础_003_将Map集合对象转换为JSon格式的对象字符串,返回给界面
将Map集合对象转换为JSon格式的对象字符串,返回给界面 需导入的jar包: 编写servlet: package com.west.webcourse.servlet; import java.i ...
随机推荐
- Androidstudio 编译慢 这样的体验肯定很多人都有!!!
本人也是经历过的 在老板站在你身后 说看下你做的东西怎么样啦 然后你开始编译你刚写代码 然后过了老长一段时间 你默默的拿起水来喝 缓解尴尬 boss一直站在后面 忍 ...
- Swift 构造过程
构造过程是为了使用某个类.结构体或枚举类型的实例而进行的准备过程.这个过程包含了为实例中的每个属性设置初始值和为其执行必要的准备和初始化任务. Swift 构造函数使用 init() 方法. 与 Ob ...
- linux中read,write和recv,send的区别
linux中read,write和recv,send的区别 1.recv和send函数提供了和read和write差不多的功能.但是他们提供了第四个参数来控制读写操作. int recv(int so ...
- 虚拟化技术实现 — KVM 的 CPU 虚拟化
目录 文章目录 目录 前文列表 x86 体系结构的虚拟化 硬件辅助的 CPU 虚拟化 由 VMX 切换支撑的 CPU 虚拟化技术 KVM 的 CPU 虚拟化实现 vCPU 的调度方式 客户机 CPU ...
- Anaconda3详细安装使用教程及问题总结
1.Anaconda是什么? 简单来说,Anaconda是Python的包管理器和环境管理器. 先来解决一个初学者都会问的问题:我已经安装了Python,那么为什么还需要Anaconda呢?原因有以下 ...
- Java 检查IPv6地址的合法性
Java 检查IPv6地址的合法性 由于IPv4资源即将耗尽,IPv6将要正式启用,这是大势所趋. 一些现有的服务和应用逐步要对IPv6支持,目前还处在过渡阶段. 提前了解一些IPv6的知识,还是有必 ...
- Python扫描器-爬虫基础
0x1.基础框架原理 1.1.爬虫基础 爬虫程序主要原理就是模拟浏览器发送请求->下载网页代码->只提取有用的数据->存放于数据库或文件中 1.1.基础原理 1.发起HTTP请求 2 ...
- Flutter Window环境运行(VSCode + 单独运行Android 虚拟机)
官网以及很多网上文章的开发都是基于Android ,因为它能创建不同类型移动设备虚拟机.但个人始终觉得它太庞大,启动慢耗资源,但我们使用Flutter又离不开虚拟机. 经过实践,现在能成功的单独启动移 ...
- ubuntu16.04 下通过rc.d(rc.local)实现开机启动(未登录)anydesk
先编辑anydesk-X.X.X/init/anydesk文件,将"DAEMON=//usr/bin$NAME"改成"DAEMON=/XXX/anydesk-5.1.1/ ...
- GRU网络
1.GRU(Gated Recurrent Unit) 为了克服RNN无法远距离依赖而提出了LSTM,而GRU是LSTM的一个变体,GRU保持LSTM效果的同时,又使结构变得简单. 2.GRU结构 G ...