在 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 接收数据、读取配置文件时是必需的。