.Net中JSON序列化和反序列化
来源:互联网 发布:greg laswell 知乎 编辑:程序博客网 时间:2024/05/09 15:50
.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 referenceSystem.Runtime.Serialization
- Add namespaceSystem.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 referenceSystem.Data.DataSetExtensions
- Add namespaceSystem.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
- .Net中JSON序列化和反序列化
- 关于JSON.NET中对json的序列化和反序列化
- 在MVC中使用Json.Net序列化和反序列化Json对象
- .NET进行Json的序列化和反序列化
- ASP.NET Json序列化和反序列化实例
- .NET JSON对象序列化和反序列化
- json.net 对象序列化和反序列化
- .net对json序列化和反序列化
- Json.Net序列化和反序列化设置
- 【整理】Json.net序列化和反序列
- .NET Framewok 3.5 中 JSON 序列化和反序列化的简单实现
- .NET Framewok 3.5 中 JSON 序列化和反序列化的简单实现
- .NET Framewok 3.5 中 JSON 序列化和反序列化的简单实现
- .NET Framewok 3.5 中 JSON 序列化和反序列化的简单实现
- 在 .NET 3.5 中序列化和反序列化 JSON
- .NET Framewok 3.5 中 JSON 序列化和反序列化的简单实现
- .NET Framewok 3.5 中 JSON 序列化和反序列化的简单实现
- .NET Framewok 3.5 中 JSON 序列化和反序列化的简单实现
- Make Menuconfig详解 (配置内核选择)
- HBase简介
- Java4Android学习四 - static
- Vim的使用(转)
- 使用Autohotkey 实现简单的全局鼠标手势功能
- .Net中JSON序列化和反序列化
- UVA - 10401 Injured Queen Problem(dp)
- ORACLE ALTER TABLE
- java中的取余与除法
- 动态规划之状态压缩dp入门
- Hibernate主键生成策略
- Java进阶 创建和销毁对象
- 天声人語
- dirname(__FILE__)的含义和应用