C#中使用Json.NET进行数据序列化与反序列化
在C#开发中,将对象转换为JSON字符串(序列化)以及将JSON字符串还原为对象(反序列化)是常见的操作。虽然.NET Framework内置了DataContractJsonSerializer,但在处理复杂类型、继承或集合时往往需要繁琐的代码配置。本文将推荐使用广泛使用的第三方库Json.NET(Newtonsoft.Json),通过精简的代码行实现高效的序列化与反序列化,并提供完整的代码示例供参考。
为何选择 Json.NET
在早期的 .NET 开发实践中,许多开发者会尝试使用系统自带的 DataContractJsonSerializer。然而,在实际调试中常会遇到一些棘手的问题:
- 属性限制:如果实体类带有
[DataContractAttribute(IsReference=true)]等特性,或者继承了基类(如 EntityObject),自带的序列化器可能会抛出异常。 - 集合处理不便:序列化集合时需要编写额外的循环或逻辑,且不支持泛型的便捷扩展。
- 代码冗长:需要手动创建
MemoryStream并处理编码转换,代码行数多且易出错。
相比之下,Json.NET(Newtonsoft.Json) 提供了极其简洁的 API,仅需一行代码即可完成单个对象或集合的序列化与反序列化,且生成的 JSON 符合标准 RFC 规范。
准备工作
在使用 Json.NET 之前,请确保项目中已安装该库。可以通过 NuGet 包管理器控制台执行以下命令安装:
Install-Package Newtonsoft.Json
第1步:定义数据实体类
首先创建一个用于测试的简单实体类。在 Json.NET 中,默认的 public 属性和字段即可自动参与序列化,无需像 DataContract 那样额外标记 [DataMember],当然标记也是支持的。以下是一个基础的实体类示例:
public class wf_Task_Inbox
{
public string ID { get; set; }
public string Name { get; set; }
// 构造函数
public wf_Task_Inbox(string id, string name)
{
this.ID = id;
this.Name = name;
}
}
第2步:执行对象到 JSON 的序列化
使用 JsonConvert.SerializeObject 方法可以将对象转换为 JSON 字符串。该方法支持格式化选项,例如 Formatting.Indented 用于生成带缩进的可读 JSON,而 Formatting.None 则生成紧凑的 JSON。
.NET 自带方法对比(不推荐)
为了展示复杂度,以下是使用系统自带方法的写法:
public string EntityToJson(wf_Task_Inbox entity)
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(entity.GetType());
using (MemoryStream stream = new MemoryStream())
{
serializer.WriteObject(stream, entity);
return Encoding.UTF8.GetString(stream.ToArray());
}
}
Json.NET 方法(推荐)
使用 Json.NET,只需调用静态方法即可:
// 单个对象序列化
string jsonStr = JsonConvert.SerializeObject(entity);
// 集合序列化
List<wf_Task_Inbox> list = GetList();
string jsonArray = JsonConvert.SerializeObject(list, Formatting.None); // 紧凑型
// 或
string jsonArrayPretty = JsonConvert.SerializeObject(list, Formatting.Indented); // 格式化型
第3步:执行 JSON 到对象的反序列化
反序列化是将 JSON 字符串重新转换为 C# 对象的过程。Json.NET 提供强类型的反序列化支持,尤其是对泛型集合的支持非常友好。
.NET 自带方法对比(不推荐)
public wf_Task_Inbox JsonToEntity(string jsonstring)
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(wf_Task_Inbox));
using (MemoryStream mStream = new MemoryStream(Encoding.UTF8.GetBytes(jsonstring)))
{
return serializer.ReadObject(mStream) as wf_Task_Inbox;
}
}
Json.NET 方法(推荐)
对于单个对象:
wf_Task_Inbox obj = JsonConvert.DeserializeObject<wf_Task_Inbox>(jsonstring);
对于集合对象(这是 Json.NET 的优势所在,无需手动遍历解析):
List<wf_Task_Inbox> list = JsonConvert.DeserializeObject<List<wf_Task_Inbox>>(jsonArray);
生成的 JSON 数据示例
当对一个包含多个 wf_Task_Inbox 实例的列表进行序列化后,生成的标准 JSON 字符串如下:
[{"ID":"0","Name":"姓名:0"},{"ID":"1","Name":"姓名:1"},{"ID":"2","Name":"姓名:2"}]
该格式完全兼容前端 JavaScript 及其他跨语言平台,确保了数据交换的通用性。
总结
在 C# 项目中进行 JSON 数据处理时,强烈推荐使用 Json.NET。它解决了原生序列化器在处理继承、复杂结构和集合时的局限性,以极简的代码实现了高性能的数据转换。无论是单体应用还是微服务架构,Json.NET 都是可靠的底层基础组件。
以上就是C#使用Json.NET进行数据序列化和反序列化的详细内容,更多关于C# JSON开发资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









