在C#中处理JSON:.NET的解析与序列化

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

在 C# 中处理 JSON 的入门介绍



JSON(JavaScript 对象表示法)是一种轻量级数据交换格式,已成为 Web 服务、配置文件和 API 之间通信的标准。在 C# (.NET) 生态系统中,处理 JSON 是每位开发者都会遇到的基本任务之一。本文将深入探讨如何使用内置的 System.Text.Json 库和流行的第三方库 Newtonsoft.Json 在 C# 中执行解析(反序列化)和序列化数据。



您将学习如何将 C# 对象转换为 JSON 字符串以及反向转换,如何处理嵌套结构,以及在实践中可能遇到的陷阱。本文内容对初学者和希望系统化知识的有经验开发者都很有帮助。



将 C# 对象序列化为 JSON



序列化是将 C# 对象(或其他数据结构)转换为 JSON 格式字符串的过程。在 .NET 中,有几种方法可以实现。我们来看两种主要方法:System.Text.Json(微软推荐)和 Newtonsoft.Json(传统但仍广泛使用)。



使用 System.Text.Json 进行序列化



从 .NET Core 3.0 开始,微软推出了自己的处理 JSON 的库 —— System.Text.Json。它的特点是高性能和最小内存消耗。序列化使用 JsonSerializer.Serialize() 方法。



using System;using System.Text.Json;

public class Person{ public string Name { get; set; } public int Age { get; set; } public string Email { get; set; }}

class Program{ static void Main() { var person = new Person { Name = "Ivan Petrov", Age = 30, Email = "ivan@example.com" };

string json = JsonSerializer.Serialize(person); Console.WriteLine(json); }}


执行结果:

{"Name":"Ivan Petrov","Age":30,"Email":"ivan@example.com"}


使用 Newtonsoft.Json 进行序列化



Newtonsoft.Json 库(也称为 Json.NET)长期以来一直是事实上的标准。它提供了比内置解决方案更高的灵活性和设置。要使用它,您需要安装 NuGet 包 Newtonsoft.Json。



using System;using Newtonsoft.Json;

public class Person{ public string Name { get; set; } public int Age { get; set; } public string Email { get; set; }}

class Program{ static void Main() { var person = new Person { Name = "Maria Sidorova", Age = 25, Email = "maria@example.com" };

string json = JsonConvert.SerializeObject(person); Console.WriteLine(json); }}


结果类似,但 Newtonsoft.Json 默认在配置时对属性名称使用 camelCase 表示法。



序列化配置



在这两个库中,您都可以控制输出格式:忽略空值、使用 CamelCase、格式化 JSON 并添加缩进等。



带设置的 System.Text.Json 示例:

var options = new JsonSerializerOptions{    WriteIndented = true, // 带缩进的漂亮输出    PropertyNamingPolicy = JsonNamingPolicy.CamelCase, // CamelCase 表示法    DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull // 忽略 null};

string json = JsonSerializer.Serialize(person, options);


在 C# 中解析(反序列化)JSON



反序列化是相反的过程:将 JSON 字符串转换为 C# 对象。这在从 API 接收数据、读取配置文件时是必需的。

博客

书籍推荐