JsonTools
public class JsonTools
{ /// <summary>
/// Generate Json string from the object
/// </summary>
/// <param name="obj">Object</param>
/// <returns>Json String</returns>
public static string ObjectToJson(object obj)
{
//System.Runtime.Serialization.Json.DataContractJsonSerializer; DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
MemoryStream stream = new MemoryStream();
serializer.WriteObject(stream, obj);
byte[] dataBytes = new byte[stream.Length];
stream.Position = 0;
stream.Read(dataBytes, 0, (int)stream.Length);
String dataString = Encoding.UTF8.GetString(dataBytes);
return dataString;
} /// <summary>
/// Generate a object from Json string
/// </summary>
/// <param name="jsonString">Json string</param>
/// <param name="obj">Object</param>
/// <returns>Object</returns>
public static object JsonToObject(string jsonString, object obj)
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
MemoryStream mStream = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
obj = serializer.ReadObject(mStream);
return obj;
} /// <summary>
/// Generate a object from Json string
/// </summary>
/// <param name="jsonString">Json string</param>
/// <param name="obj">Object</param>
/// <returns>Object</returns>
public static T JsonToObject<T>(string jsonString)
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
using (MemoryStream mStream = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)))
{
return (T)serializer.ReadObject(mStream);
}
} /// <summary>
/// 序列化数据为Json数据格式.
/// </summary>
/// <param name="value">被序列化的对象</param>
/// <returns></returns>
public static string ObjectToJson2(object value)
{
return ObjectToJson2(value, false);
} /// <summary>
/// 序列化数据为Json数据格式.
/// </summary>
/// <param name="value">被序列化的对象</param>
/// <param name="clearLastZero">是否清除小数位后的0</param>
/// <returns></returns>
public static string ObjectToJson2(object value, bool clearLastZero)
{
Type type = value.GetType();
Newtonsoft.Json.JsonSerializer json = new Newtonsoft.Json.JsonSerializer();
//json.NullValueHandling = NullValueHandling.Ignore;
json.ObjectCreationHandling = Newtonsoft.Json.ObjectCreationHandling.Replace;
json.MissingMemberHandling = Newtonsoft.Json.MissingMemberHandling.Ignore;
json.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; json.Converters.Add(new Newtonsoft.Json.Converters.StringEnumConverter());
IsoDateTimeConverter timeFormate = new IsoDateTimeConverter();
timeFormate.DateTimeFormat = "yyyy-MM-dd";
json.Converters.Add(timeFormate);
json.Formatting = Formatting.Indented;
json.NullValueHandling = NullValueHandling.Ignore; if (clearLastZero)
json.Converters.Add(new MinifiedNumArrayConverter());
StringWriter sw = new StringWriter();
Newtonsoft.Json.JsonTextWriter writer = new JsonTextWriter(sw);
writer.Formatting = Formatting.None;
writer.QuoteChar = '"';
writer.QuoteName = false;
json.Serialize(writer, value); string output = sw.ToString();
writer.Close();
sw.Close(); return output;
}
/// <summary>
/// 将Json数据转为对象
/// </summary>
/// <typeparam name="T">目标对象</typeparam>
/// <param name="jsonText">json数据字符串</param>
/// <returns></returns>
public static T JsonToObject2<T>(string jsonText)
{
Newtonsoft.Json.JsonSerializer json = new Newtonsoft.Json.JsonSerializer(); json.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
json.ObjectCreationHandling = Newtonsoft.Json.ObjectCreationHandling.Replace;
json.MissingMemberHandling = Newtonsoft.Json.MissingMemberHandling.Ignore;
json.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; StringReader sr = new StringReader(jsonText);
Newtonsoft.Json.JsonTextReader reader = new JsonTextReader(sr);
T result = default(T);
try
{
result = (T)json.Deserialize(reader, typeof(T));
}
catch
{
}
finally
{
reader.Close();
}
return result;
} /// <summary>
/// 普通集合转换Json
/// </summary>
/// <param name="array">集合对象</param>
/// <returns>Json字符串</returns>
public static string ListToJson(IEnumerable array)
{ string jsonString = "["; foreach (object item in array)
{
jsonString += ObjectToJson(item) + ",";
}
int t = jsonString.LastIndexOf(',');
string strTmp = jsonString.Substring(0, t);
return strTmp + "]"; } /// <summary>
/// DataTable to json
/// </summary>
/// <param name="jsonName">返回json的名称</param>
/// <param name="dt">转换成json的表</param>
/// <returns></returns>
public string DataTableToJson(string jsonName, System.Data.DataTable dt, string strTotal = "")
{
StringBuilder Json = new StringBuilder();
Json.Append("[{\"TotalCount\":\"" + strTotal + "\",\"Head\":[");
for (int i = 0; i < dt.Columns.Count; i++)
{
Json.Append("{\"ColumnHead\":\"" + dt + dt.Columns[i].ColumnName + "\"}"); if (i < dt.Columns.Count - 1)
{
Json.Append(",");
}
}
Json.Append("],"); Json.Append("\"" + jsonName + "\":[");
if (dt.Rows.Count > 0)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
Json.Append("{");
for (int j = 0; j < dt.Columns.Count; j++)
{
Json.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":\"" + dt.Rows[i][j].ToString() + "\"");
if (j < dt.Columns.Count - 1)
{
Json.Append(",");
}
}
Json.Append("}");
if (i < dt.Rows.Count - 1)
{
Json.Append(",");
}
}
}
Json.Append("]}]");
return Json.ToString();
} public class MinifiedNumArrayConverter : JsonConverter
{
private void dumpNumArray<T>(JsonWriter writer, T[] array)
{
foreach (T n in array)
{
var s = n.ToString();
//此處可考慮改用string.format("{0:#0.####}")[小數後方#數目依最大小數位數決定]
//感謝網友vencin提供建議
if (s.EndsWith(".0"))
writer.WriteRawValue(s.Substring(0, s.Length - 2));
else if (s.Contains("."))
writer.WriteRawValue(s.TrimEnd('0'));
else
writer.WriteRawValue(s);
}
} private void dumpNum<T>(JsonWriter writer, T value)
{
var s = value.ToString();
//此處可考慮改用string.format("{0:#0.####}")[小數後方#數目依最大小數位數決定]
//感謝網友vencin提供建議
if (s.EndsWith(".0"))
writer.WriteRawValue(s.Substring(0, s.Length - 2));
else if (s.Contains("."))
writer.WriteRawValue(s.TrimEnd('0'));
else
writer.WriteRawValue(s);
} public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
Type t = value.GetType();
if (t == dblArrayType)
{
writer.WriteStartArray();
dumpNumArray<double>(writer, (double[])value);
writer.WriteEndArray();
}
else if (t == decArrayType)
{
writer.WriteStartArray();
dumpNumArray<decimal>(writer, (decimal[])value);
writer.WriteEndArray();
}
else if (t == decType || t == decNullType)
{
dumpNum<decimal>(writer, (decimal)value);
}
else
throw new NotImplementedException();
} private Type dblArrayType = typeof(double[]);
private Type decArrayType = typeof(decimal[]);
private Type decType = typeof(decimal);
private Type decNullType = typeof(decimal?); public override bool CanConvert(Type objectType)
{
if (objectType == dblArrayType || objectType == decArrayType || objectType == decType || objectType == decNullType)
return true;
return false;
} public override bool CanRead
{
get { return false; }
} public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
}
JsonTools的更多相关文章
- Android 开发工具类 14_ JsonTools
天气 JSON 数据解析 package com.example.weather_json.tools; import java.util.ArrayList; import java.util.Li ...
- JsonTools 工具类
import net.sf.json.JSONObject; public class JsonTools { public static JSONObject getJSONObject(Strin ...
- Json解析工具的选择
前言 前段时间@寒江不钓同学针对国内Top500和Google Play Top200 Android应用做了全面的分析(具体分析报告见文末的参考资料),其中有涉及到对主流应用使用json框架Gson ...
- Android JSON、GSON、FastJson的封装与解析
声明: 1.本帖只提供代码,不深入讲解原理.如果读者想要深入了解,那就不要在这个帖子上浪费时间了 2.客户端用的是Google官方的Volley访问服务器,具体了解Volley请戳 这里 3.本帖三种 ...
- android Json Gson FastJson 解析
一 Json xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:a ...
- Google App Engine, Python2.7的UnicodeDecodeError bug
在跟Web Development,要在Google App Engine上写作业,出师不利,遇到以下bug: 2014-05-06 16:14:17 Running command: "[ ...
- Socket开发框架之消息的回调处理
在一般的Socket应用里面,很多时候数据的发送和接收是分开处理的,也就是我们发送一个消息,不知道这个请求消息什么时候得到应答消息,而且收到对应的应答消息的时候,如果操作界面的内容,也是需要特别处理的 ...
- Socket开发框架之数据加密及完整性检查
在前面两篇介绍了Socket框架的设计思路以及数据传输方面的内容,整个框架的设计指导原则就是易于使用及安全性较好,可以用来从客户端到服务端的数据安全传输,那么实现这个目标就需要设计好消息的传输和数据加 ...
- Socket开发框架之数据传输协议
我在前面一篇随笔<Socket开发框架之框架设计及分析>中,介绍了整个Socket开发框架的总体思路,对各个层次的基类进行了一些总结和抽象,已达到重用.简化代码的目的.本篇继续分析其中重要 ...
随机推荐
- 为什么HashMap桶(链表)的长度超过8会转换成红黑树?
百度了一下,感觉能说清楚的并不多,所以在此记录一下. 首先说一说转换为红黑树的必要性: 红黑树的插入.删除和遍历的最坏时间复杂度都是log(n), 因此,意外的情况或者恶意使用下导致hashCode( ...
- du命令详解
基础命令学习目录首页 原文链接:https://blog.csdn.net/linuxnews/article/details/51207738 导读du命令是检查硬盘使用情况,统计文件或目录及子目录 ...
- Java调用XML的方法:DocumentBuilderFactory
(1)首先得到:得到 DOM 解析器的工厂实例 DocumentBuilderFactory domfac=DocumentBuilderFactory.newInstance(); (2)然后从 D ...
- idea最常使用的快捷键
撤销 反撤销 : Ctrl+Z / Ctrl+Shift+Z 删除一行 : Ctrl+Y 跳到实现类 : Ctrl+Alt+B 重命名文件: shift+F6 控制台放大缩小: ctrl+shif ...
- Daily Scrumming* 2015.10.26(Day 7)
一.总体情况总结 今天我们开会具体讨论了一下接下来的任务.还详细讨论了一下分数的分配,具体分数分配我们会在下一篇博客中详细说明. 我们下一周大致的工作安排如下: 1.UI:完成社团后台界面的设计,以及 ...
- java实验三 敏捷开发与XP实践
一.实验内容 (一)敏捷开发与XP 软件开发流程的目的是为了提高软件开发.运营.维护的效率,并提高软件的质量.用户满意度.可靠性和软件的可维护性. 光有各种流程的思想是不够的,我们还要有一系列的工具来 ...
- 实验三 敏捷开发和XP实验
课程:Java程序设计实验 班级:1352 姓名: 于佳心 学号:20135206 成绩: 指导教师:娄嘉鹏 ...
- iOS开发学习-给圆形图片添加边框
imageView.layer.cornerRadius = imageView.bounds.size.width * 0.5;// 设置圆角刚好是自身宽度的一半,就刚好是圆形 imageView. ...
- struts2.3.16.1+hibernate4.3.4+spring4.0.2
把之前的老项目用新的改了 发现新的有点很方便啊 Struts2+Hibernate+Spring整合 用的是 struts2.3.16.1 hibernate4.3.4 ...
- Week4-作业1:阅读与博客
第四章.两人合作 1.原文: 在变量面前加上有意义的前缀,程序员就能一眼看出变量的类型及相应的语义.这就是“匈牙利命名法”的用处.还有一些地方不适合用“匈牙利命名法”,比如,在一些强类型的语言(如C# ...