.NET 中的 JSON 序列化和反序列化(封送和拆收)- 概述

System.Text.Json 命名空间提供用于序列化和反序列化 JavaScript 对象表示法 (JSON) 的功能。 序列化 是将对象的状态(即其属性的值)转换为可存储或传输的形式的过程。 序列化窗体不包含有关对象关联方法的任何信息。 反序列化 从序列化形式重新构造对象。

库的设计强调对广泛的功能集实现高性能和低内存分配。 内置的 UTF-8 支持可优化读写以 UTF-8 编码的 JSON 文本的过程,UTF-8 编码是针对 Web 上的数据和磁盘上的文件的最普遍的编码方式。

库还提供了用于处理内存中文档对象模型 (DOM) 的类。 此功能允许对 JSON 文件或字符串中的元素进行随机访问。

存在针对可在 Visual Basic 代码中使用哪些库部分的一些相关限制。 有关详细信息,请参阅 Visual Basic 支持

如何获取库

该库是作为 .NET Core 3.0 及更高版本共享框架的一部分内置的。 源生成功能内置在 .NET 6 和更高版本的共享框架中。 使用源生成需要具有 .NET 5 SDK 或更高版本。

对于早于 .NET Core 3.0 的框架版本,请安装 System.Text.Json NuGet 包。 包支持以下框架:

  • .NET Standard 2.0 及更高版本
  • .NET Framework 4.7.2 及更高版本
  • .NET Core 2.1 及更高版本
  • .NET 5 及更高版本

运行时反射与编译时源生成

默认情况下,System.Text.Json 使用运行时反射来收集访问对象属性以进行序列化和反序列化时所需的元数据。 作为替代方法,System.Text.Json 可以使用 C# 源生成功能来提高性能、降低专用内存使用量以及推动程序集修整,从而缩小应用大小。 有关详细信息,请参阅如何在 System.Text.Json 中选择反射或源生成

安全信息

有关在设计 JsonSerializer 时考虑的安全威胁以及如何缓解这些威胁的信息,请参阅 System.Text.Json 威胁模型

线程安全

System.Text.Json 类型是线程安全的,包括:

其他资源