在C#中,Json的序列化和反序列化帮助类
Table of Contents
1 Json基本介绍
Json【javascript对象表示方法】,它是一个轻量级的数据交换格式,我们可以很简单的来读取和写它, 并且它很容易被计算机转化和生成,它是完全独立于语言的。
1.1 Json支持的数据结构
1.1.1 键值对的集合
各种不同的编程语言,都支持这种数据结构;
1.1.2 有序的列表类型值的集合
这其中包含数组,集合,矢量,或者序列,等等。
1.2 Json的表现形式
1.2.1 对象
一个没有顺序的“键/值”,一个对象以花括号“{”开始,并以花括号"}"结束,在每一个“键”的后面,有一个冒号,并且使用逗号来分隔多个键值对。例如:
var user = {"name":"anbgsl1110","gender":"Male","birthday":"1993-06-13"}
1.2.2 数组
设置值的顺序,一个数组以中括号"["开始,并以中括号"]"结束,并且所有的值使用逗号分隔,例如:
var userlist = [{"user":{"name":"anbgsl1110","gender":"Male","birthday":"1993-06-13"}}, {"user":{"name":"slht","Male":"Female","birthday":"1995-11-10"}}]
1.2.3 字符串
任意数量的Unicode字符,使用引号做标记,并使用反斜杠来分隔。例如:
var userlist = "{\"ID\":1,\"Name\":\"anbgsl1110\",\"Address\":\"kx\"}"
2 性能
3 Json的序列化和反序列化帮助类(Newtonsoft.Json(Json.Net)为例)
3.1 Json序列化和反序列化的简单封装
/// <summary> /// Json帮助类 /// </summary> public class JsonHelper { /// <summary> /// 将对象序列化为JSON格式 /// </summary> /// <param name="o">对象</param> /// <returns>json字符串</returns> public static string SerializeObject(object o) { string json = JsonConvert.SerializeObject(o); return json; } /// <summary> /// 解析JSON字符串生成对象实体 /// </summary> /// <typeparam name="T">对象类型</typeparam> /// <param name="json">json字符串</param> /// <returns>对象实体</returns> public static T DeserializeJsonToObject<T>(string json) where T : class { JsonSerializer serializer = new JsonSerializer(); StringReader sr = new StringReader(json); object o = serializer.Deserialize(new JsonTextReader(sr), typeof(T)); T t = o as T; return t; } /// <summary> /// 解析JSON数组生成对象实体集合 /// </summary> /// <typeparam name="T">对象类型</typeparam> /// <param name="json">json数组字符串</param> /// <returns>对象实体集合</returns> public static List<T> DeserializeJsonToList<T>(string json) where T : class { JsonSerializer serializer = new JsonSerializer(); StringReader sr = new StringReader(json); object o = serializer.Deserialize(new JsonTextReader(sr), typeof(List<T>)); List<T> list = o as List<T>; return list; } /// <summary> /// 反序列化JSON到给定的匿名对象. /// </summary> /// <typeparam name="T">匿名对象类型</typeparam> /// <param name="json">json字符串</param> /// <param name="anonymousTypeObject">匿名对象</param> /// <returns>匿名对象</returns> public static T DeserializeAnonymousType<T>(string json, T anonymousTypeObject) { T t = JsonConvert.DeserializeAnonymousType(json, anonymousTypeObject); return t; } }
3.2 注意点
- 通常使用调用实体序列化SerializeObject()和反序列化DeserializeJsonToObject()两个方法就可以了。但有些情况下我们解析json字符串时,可能没有对应的实体类型(或者说不想添加对应的实体类),这时候可以用匿名对象解析方法DeserializeAnonymousType()。
- Json的两种结构数组和对象解析时略有不同。Json对象一般转换成实体,Json数组一般转换成实体集合。