Json序列反序列类型处理帮助类
Json序列反序列类型处理帮助类。
- JSON反序列化
- JSON序列化
- 将Json序列化的时间由/Date(1294499956278+0800)转为字符串
- 将时间字符串转为Json时间
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;
using System.Runtime.Serialization.Json;
using System.Web.Script.Serialization; namespace IM.Common
{
public class JsonArryHelper
{
/// <summary>
/// JSON序列化
/// </summary>
public static string JsonSerializer<T>(T t)
{
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
MemoryStream ms = new MemoryStream();
ser.WriteObject(ms, t);
string jsonString = Encoding.UTF8.GetString(ms.ToArray());
ms.Close();
//替换Json的Date字符串
string p = @"\\/Date\((\d+)\+\d+\)\\/";
MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertJsonDateToDateString);
Regex reg = new Regex(p);
jsonString = reg.Replace(jsonString, matchEvaluator);
return jsonString;
} /// <summary>
/// JSON反序列化
/// </summary>
/// <param name="json"></param>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static T Deserialize<T>(string json)
{
var obj = Activator.CreateInstance<T>();
using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
{
var serializer = new DataContractJsonSerializer(obj.GetType());
return (T)serializer.ReadObject(ms);
} } /// <summary>
/// JSON反序列化
/// </summary>
public static T JsonDeserialize<T>(string jsonString)
{
//将"yyyy-MM-dd HH:mm:ss"格式的字符串转为"\/Date(1294499956278+0800)\/"格式
string p = @"\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}";
MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertDateStringToJsonDate);
Regex reg = new Regex(p);
jsonString = reg.Replace(jsonString, matchEvaluator);
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
T obj;
try
{
obj = (T)ser.ReadObject(ms);
}
catch
{
obj = default(T);
}
return obj;
}
/// <summary>
/// 将Json序列化的时间由/Date(1294499956278+0800)转为字符串
/// </summary>
private static string ConvertJsonDateToDateString(Match m)
{
string result = string.Empty;
DateTime dt = new DateTime(, , );
dt = dt.AddMilliseconds(long.Parse(m.Groups[].Value));
dt = dt.ToLocalTime();
result = dt.ToString("yyyy-MM-dd HH:mm:ss");
return result;
}
/// <summary>
/// 将时间字符串转为Json时间
/// </summary>
private static string ConvertDateStringToJsonDate(Match m)
{
string result = string.Empty;
DateTime dt = DateTime.Parse(m.Groups[].Value);
dt = dt.ToUniversalTime();
TimeSpan ts = dt - DateTime.Parse("1970-01-01");
result = string.Format("\\/Date({0}+0800)\\/", ts.TotalMilliseconds);
return result;
} public static List<T> JSONStringToList<T>(string jsonStr)
{
var serializer = new JavaScriptSerializer();
var objs = serializer.Deserialize<List<T>>(jsonStr);
return objs;
}
}
}using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Newtonsoft.Json;
using System.IO;
using System.Web.Mvc;
using System.Globalization; namespace IM.Common
{
/// <summary>
/// 序列化操作类
/// <para>创建作者:changjin</para>
/// <para>创建日期:2010/10/25</para>
/// </summary>
public class JsonSerialize
{
/// <summary>
/// 序列化对象
/// <para>创建作者:changjin</para>
/// <para>创建日期:2010/12/28</para>
/// </summary>
/// <param name="obj">序列化的对象</param>
/// <returns>序列化后的json字符串</returns>
public static String SerializeObject(Object obj)
{
//StringWriter sw = new StringWriter(CultureInfo.InvariantCulture);
//JsonSerializer jsonSerializer = new JsonSerializer();
//jsonSerializer.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
//JsonWriter jsonWriter = // jsonWriter.Formatting = Formatting.Indented;
// jsonSerializer.Serialize(jsonWriter, obj); //return sw.ToString();
return JsonConvert.SerializeObject(obj);
}
public static String SerializeObject1(Object obj)
{
//StringWriter sw = new StringWriter(CultureInfo.InvariantCulture);
//JsonSerializer jsonSerializer = new JsonSerializer();
//jsonSerializer.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
//JsonWriter jsonWriter = // jsonWriter.Formatting = Formatting.Indented;
// jsonSerializer.Serialize(jsonWriter, obj); //return sw.ToString();
return JsonConvert.SerializeObject(obj, Formatting.Indented);
}
/// <summary>
/// 对象反序列化
/// <para>创建作者:changjin</para>
/// <para>创建日期:2010/12/28</para>
/// </summary>
/// <param name="jsonString">json对象字符串</param>
/// <param name="type">反序列化对象类型</param>
/// <returns>反序列化后的对象</returns>
public static Object DeserializeObject(String jsonString, Type type)
{
return JsonConvert.DeserializeObject(jsonString, type.GetType());
} /// <summary>
/// 对象反序列化
/// <para>创建作者:changjin</para>
/// <para>创建日期:2010/12/28</para>
/// </summary>
/// <param name="jsonString">json对象字符串</param>
/// <param name="type">反序列化对象类型</param>
/// <returns>反序列化后的对象</returns>
public static T DeserializeObject<T>(String jsonString)
{
return JsonConvert.DeserializeObject<T>(jsonString);
} }
}
Json序列反序列类型处理帮助类的更多相关文章
- Newtonsoft.Json 序列 反序列 IEnumerable
下面是memcached 中获取的obj 类型的数据,转list string sessionId = Request.Cookies["sessionId"].Value;//授 ...
- C#将Json字符串反序列化成List对象类集合
摘自:http://blog.csdn.net/cdefg198/article/details/7520398 using System.IO; using System.Web.Script.Se ...
- 类对象序列化为json串,json串反序列化为类对象
1.类对象序列化为json串: 方法一: class P(object): def __init__(self,name,age,sex): self.name=name self.age=age s ...
- python 字符与字节 json序列和反序列及支持的类型
b = b"demo" s = "demo" # 字符串转字节 s = bytes(s, encoding = "utf8") s = st ...
- 将Dictionary序列化为json数据 、json数据反序列化为Dictionary
需要引用System.Web.Extensions dll类库 /// <summary> /// 将json数据反序列化为Dictionary /// </summary> ...
- Python: Json串反序列化为自定义类对象
最近刚接触到python,就想到了如何反序列化json串.网上找了一下,大部分都是用json模块反序列化为python数据结构(字典和列表).如果对json模块不了解的参考菜鸟教程.然后我在此基础上将 ...
- 咏南中间件JSON序列类
咏南中间件JSON序列类 1)支持跨平台.跨语言 2)支持主从表数据序列.还原,支持任意数量的表 主从表数据序列为JSON字符串样式: { "rows": [ { "FD ...
- 将JSON字符串反序列化为指定的.NET对象类型
目录导航: 前言: 方法一.在项目中定义对应的对象参数模型,用于映射反序列化出来的参数(复杂JSON字符串数据推荐使用): 方法二.直接将JSON字符串格式数据反序列化转化为字典数据(简单JSON字符 ...
- .NET3.5中JSON用法以及封装JsonUtils工具类
.NET3.5中JSON用法以及封装JsonUtils工具类 我们讲到JSON的简单使用,现在我们来研究如何进行封装微软提供的JSON基类,达到更加方便.简单.强大且重用性高的效果. 首先创建一个类 ...
随机推荐
- ajax无刷新方式收集表单并提交表单
ajax无刷新方式收集表单有两种方式, 一个是使用html5的FormData.一个是传统的方式. 一,FormData,在主流的浏览器中可以用,IE不好用啊. 另外,FormData使用有两个条件, ...
- Python 3中bytes和str的分别
最近把一段py2的代码转换到py3的代码,结果运行到向socket中写数据的代码部分出现了'str' does not support the buffer interface这样一个错误. 一番搜索 ...
- JavaScript的“闭包”到底是什么(2)
我的上篇博客标题不对,造成一些误解.我认为博客的宗旨不是背教科书,而是分享研发心得.我的上篇标题因该改成“JavaScript 闭包的一个议题:它对outer scope 的影响”,因为我没有严格地去 ...
- 【USACO 2.4.1】两只塔姆沃斯牛
[题目描述] 两只牛逃跑到了森林里.农夫John开始用他的专家技术追捕这两头牛.你的任务是模拟他们的行为(牛和John). 追击在10x10的平面网格内进行.一个格子可以是: 一个障碍物, 两头牛(它 ...
- 【USACO 2.2.3】循环数
[题目描述] 循环数是那些不包括0且没有重复数字的整数(比如81362)并且还应同时具有一个有趣的性质, 就像这个例子: 如果你从最左边的数字开始(在这个例子中是8)向右数最左边这个数(如果数到了最右 ...
- JavaScript 的setAttribute兼容性解决
setAttribute各个浏览器都支持,但在IE7以下版本中,有些属性值还是有差异的,比如 obj.setAttribute("class","classname&qu ...
- flvplayer.swf flv视频播放器使用方法
今天由于网页上要加入一个视频文件,就研究了一下flv视频播放器flvplayer.swf : 关于SewisePlayer 插件 演示例子链接 一.直接在html文件中加载: &l ...
- 一分钟让你明白CSS中的盒模型
想必初学者对CSS盒模型总是很困惑吧.下面一分钟让你彻底明白盒模型: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" &q ...
- 关于extern "C" 的用法
而在C语言的头文件中,对其外部函数只能指定为extern类型,C语言中不支持extern "C"声明,在.c文件中包含了extern "C"时会出现编译语法错误 ...
- kd树的构建以及搜索
构建算法 k-d树是一个二叉树,每个节点表示一个空间范围.表1给出的是k-d树每个节点中主要包含的数据结构. 表1 k-d树中每个节点的数据类型 域名 数据类型 描述 Node-data 数据矢量 数 ...