C#中使用Json.NET进行数据序列化与反序列化

夏知夏
夏知夏
发布时间:2026-10-15 | 5人浏览过
原创

在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开发资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表