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的更多相关文章

  1. Android 开发工具类 14_ JsonTools

    天气 JSON 数据解析 package com.example.weather_json.tools; import java.util.ArrayList; import java.util.Li ...

  2. JsonTools 工具类

    import net.sf.json.JSONObject; public class JsonTools { public static JSONObject getJSONObject(Strin ...

  3. Json解析工具的选择

    前言 前段时间@寒江不钓同学针对国内Top500和Google Play Top200 Android应用做了全面的分析(具体分析报告见文末的参考资料),其中有涉及到对主流应用使用json框架Gson ...

  4. Android JSON、GSON、FastJson的封装与解析

    声明: 1.本帖只提供代码,不深入讲解原理.如果读者想要深入了解,那就不要在这个帖子上浪费时间了 2.客户端用的是Google官方的Volley访问服务器,具体了解Volley请戳 这里 3.本帖三种 ...

  5. android Json Gson FastJson 解析

    一 Json xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:a ...

  6. Google App Engine, Python2.7的UnicodeDecodeError bug

    在跟Web Development,要在Google App Engine上写作业,出师不利,遇到以下bug: 2014-05-06 16:14:17 Running command: "[ ...

  7. Socket开发框架之消息的回调处理

    在一般的Socket应用里面,很多时候数据的发送和接收是分开处理的,也就是我们发送一个消息,不知道这个请求消息什么时候得到应答消息,而且收到对应的应答消息的时候,如果操作界面的内容,也是需要特别处理的 ...

  8. Socket开发框架之数据加密及完整性检查

    在前面两篇介绍了Socket框架的设计思路以及数据传输方面的内容,整个框架的设计指导原则就是易于使用及安全性较好,可以用来从客户端到服务端的数据安全传输,那么实现这个目标就需要设计好消息的传输和数据加 ...

  9. Socket开发框架之数据传输协议

    我在前面一篇随笔<Socket开发框架之框架设计及分析>中,介绍了整个Socket开发框架的总体思路,对各个层次的基类进行了一些总结和抽象,已达到重用.简化代码的目的.本篇继续分析其中重要 ...

随机推荐

  1. Go入门指南

    第一部分:学习 Go 语言 第1章:Go 语言的起源,发展与普及 1.1 起源与发展 1.2 语言的主要特性与发展的环境和影响因素 第2章:安装与运行环境 2.1 平台与架构 2.2 Go 环境变量 ...

  2. Digitalocean + ss 搭建加密通信代理服务器

    本文以 DigitalOcean + ss/ssr 配置加密通道***为例,记录了手动搭梯子的过程. 启动一个服务器实例的操作可以参考我的这篇博文,这里主要介绍 ss/ssr 的服务搭建过程. 首先 ...

  3. wf4 FlowChart 理解

    1. 工作流是异步的,所以需要信号. 2. 需要创建 NativeActivity<T> 与整个FlowChart交互. 它的返回值 Result 正确含义是 该 Activity处理之后 ...

  4. js备忘录2

    JavaScript 的类型分为两类,分别是原始类型和对象类型 其中原始类型中只有数字.字符串和布尔型,和java中的有些不一样 null和undefined不是基本数据类型中的某一种 对象是prop ...

  5. Scrum Meeting 11.04

    成员 今日任务 明日计划 用时 徐越 学习Fragment相关知识,代码移植 代码移植 4h 赵庶宏 selvet移植,服务器配置,编写数据库 服务器配置,代码移植 4h 薄霖 学习安卓界面设计数据库 ...

  6. No.1_NABCD模型分析

        Reminder 之 NABCD模型分析           定位 多平台的闹钟提醒软件. 在安卓市场发布软件,发布后一周的用户量为1000.           N (Need 需求) 这个 ...

  7. Task 4.5 求二维数组中的最大连通子数组之和

    任务:输入一个二维整形数组,数组里有正数也有负数. 求所有子数组的和的最大值.要求时间复杂度为O(n). 1.设计思想:因为用之前的解决子数组最大和的问题的思路一直没能解决这个问题,后来看到同学使用将 ...

  8. 课堂练习 psp表

    项目计划总结表: 日期 编程 完善程序 测试程序 参考资料 日总结 3.20 18:00---19:30       1.5 3.21   9:30----10:00 10:00---10:30   ...

  9. 浅谈对IT的认识!

    我是一个从农村出来的学生,家里的情况和大多数的农村同学是一样的,家里算不上有钱,父母供我读书,也已经是做到仁至义尽了. 我现在选了,一个和计算机有关的专业---计算机应用技术.就是希望毕业后,可以找到 ...

  10. POJ 1239 Increasing Sequences 动态规划

    题目链接: http://poj.org/problem?id=1239 Increasing Sequences Time Limit: 1000MSMemory Limit: 10000K 问题描 ...