.Net 中有多种对象序列化的方式,如XML序列化,Binary序列化及JSON序列化。
JSON(JavaScript Object Notation)是一种轻量级的数据交换语言,是一种高效的数据编码格式,可用于在客户端浏览器和支持AJAX的web服务之间快速交换少量数据。和XML序列化相比,JSON序列化后产生的数据一般要比XML序列化后产生的数据体积小。
本文主要介绍 .Net中的JSON序列化和反序列化。
准备工作:
定义要进行序列化的对象Person。
public class Person
{
public int Id { get;set; }
public string Name {get; set; }
public int Age { get;set; }
}
实例化对象
Person personOne = new Person(){
Id = 1,
Name ="Kate",
Age = 18
};
Person personTwo =new Person()
{
Id = 2,
Name ="Eva",
Age = 20
};
List<Person>PersonList = new List<Person>() { personOne, personTwo };
序列化反序列化Demo
//序列化反序列化对象
string jsonStr =JsonHelper.Serialize<Person>(personOne);
Person person =JsonHelper.Deserialize<Person>(jsonStr);
Console.WriteLine(jsonStr);
Console.WriteLine("Id=" + person.Id + "Name=" +person.Name + "Age" + person.Age);
//序列化反序列化list
string jsonListStr= JsonHelper.Serialize<List<Person>>(PersonList);
List<Person>persons = JsonHelper.Deserialize <List<Person>>(jsonListStr);
Console.WriteLine(jsonListStr);
persons.ForEach(x=>
{
Console.WriteLine("Id=" + x.Id + "Name=" + x.Name +"Age=" + x.Age);
});
Console.ReadLine();
在.Net中有三种常用的方式,分别是:
方法一:使用System.Runtime.Serialization.Json.DataContractJsonSerializer类
Note:适用于.Net Framework3.5及以后版本
如果不想序列化某个字段或者属性,可以加上[IgnoreDataMember]
- Add reference System.Runtime.Serialization
- Add namespace System.Runtime.Serialization.Json; System.Runtime.Serialization;
- 定义方法实现序列化和反序列化
public class JsonHelper
{
//序列化
public static stringSerialize<T>(T t)
{
DataContractJsonSerializer serializer = newDataContractJsonSerializer(typeof(T));
using(MemoryStreamstream = new MemoryStream())
{
serializer.WriteObject(stream, t);
string jsonStr= Encoding.UTF8.GetString(stream.ToArray());
returnjsonStr;
}
}
//反序列化
public static TDeserialize<T>(string jsonStr)
{
DataContractJsonSerializer serializer = newDataContractJsonSerializer(typeof(T));
using(MemoryStreamstream = new MemoryStream(Encoding.UTF8.GetBytes(jsonStr)))
{
T obj =(T)serializer.ReadObject(stream);
return obj;
}
}
}
- 输出结果
-
方法二:使用System.Web.Script.Serialization.JavaScriptSerializer类
Note:适用于.Net Framework3.5及以后版本
如果不想序列化某个字段或者属性,可以加上[JsonIgnore]
- Add reference System.Data.DataSetExtensions
- Add namespace System.Web.Script.Serialization;
- 定义方法实现序列化和反序列化
public class JsonHelper
{
public static stringSerialize<T>(T t)
{
JavaScriptSerializer jss = new JavaScriptSerializer();
string jsonStr =jss.Serialize(t);
return jsonStr;
}
public static TDeserialize<T>(string jsonStr)
{
JavaScriptSerializer jss = new JavaScriptSerializer();
T t =jss.Deserialize<T>(jsonStr);
return t;
}
}
- 输出结果
方法三:使用Newtonsoft.Json.JsonConvert类
此类是一个非微软提供的JSON序列化和反序列化的开源免费类库。
- install Netonsoft.Json with nuget
- Add namespace Newtonsoft.Json;
- 定义方法实现序列化和反序列化
public class JsonHelper
{
public static stringSerialize<T>(T t)
{
string jsonStr =JsonConvert.SerializeObject(t);
return jsonStr;
}
public static TDeserialize<T>(string jsonStr)
{
T t =JsonConvert.DeserializeObject<T>(jsonStr);
return t;
}
}
- 输出结果
在使用中更加推荐JSON.Net,因为JSON.Net更加灵活更加快捷,比DataContractJsonSerializer快50%,比JavaScriptSerializer快250%。
reference:
https://msdn.microsoft.com/zh-cn/library/bb410770(v=vs.110).aspx
http://www.newtonsoft.com/json
http://blog.csdn.net/zhoufoxcn/article/details/6254657