System.Text.Json 8.0.4

前缀已保留
There is a newer prerelease version of this package available.
查看下面的版本列表以获取详细信息。
dotnet add package System.Text.Json --version 8.0.4                
NuGet\Install-Package System.Text.Json -Version 8.0.4                
该命令旨在在Visual Studio的包管理器控制台中使用,因为它使用NuGet模块的Install-Package版本。
<PackageReference Include="System.Text.Json" Version="8.0.4" />                
对于支持PackageReference的项目,将此XML节点复制到项目文件中,以引用该包。
paket add System.Text.Json --version 8.0.4                
#r "nuget: System.Text.Json, 8.0.4"                
#r指令可用于F# Interactive和Polyglot Notebooks。将此复制到交互式工具或脚本的源代码中,以引用该包。
// Install System.Text.Json as a Cake Addin
#addin nuget:?package=System.Text.Json&version=8.0.4

// Install System.Text.Json as a Cake Tool
#tool nuget:?package=System.Text.Json&version=8.0.4                

关于

提供高性能和低内存分配的类型,可以将对象序列化为JavaScript对象表示法(JSON)文本,并将JSON文本反序列化为对象。支持内置的UTF-8编码。此外,还提供类型用于读取和写入以UTF-8编码的JSON文本,并创建内存中的文档对象模型(DOM),该DOM是只读的,可用于按结构视图随机访问JSON元素。

主要功能:

  • UTF-8编码JSON的高性能读取器和写入器类型。
  • 使用反射或源生成契约的.NET类型的全面功能JSON序列化器。
  • 高性能只读JSON DOM(JsonDocument)和与序列化器(JsonNode)交互的可变DOM。
  • 内置对异步序列化的支持,包括对IAsyncEnumerable的支持。
  • 可自定义可序列化类型的契约模型。

使用方法:

System.Text.Json库是.NET运行时共享框架的一部分。当您需要在较旧的.target框架中使用最新版本时,可以安装此包。

序列化:

using System;
using System.Text.Json;

WeatherForecast forecast = new (DateTimeOffset.Now, 26.6f, "Sunny");
var serialized = JsonSerializer.Serialize(forecast);

Console.WriteLine(serialized);
// {"Date":"2023-08-02T16:01:20.9025406+00:00","TemperatureCelsius":26.6,"Summary":"Sunny"}

var forecastDeserialized = JsonSerializer.Deserialize<WeatherForecast>(serialized);
Console.WriteLine(forecast == forecastDeserialized);
// True

public record WeatherForecast(DateTimeOffset Date, float TemperatureCelsius, string? Summary);

使用源生成器进行序列化

using System.Text.Json;
using System.Text.Json.Serialization;

WeatherForecast forecast = new (DateTimeOffset.Now, 26.6f, "Sunny");
var serialized = JsonSerializer.Serialize(forecast, SourceGenerationContext.Default.WeatherForecast);

Console.WriteLine(serialized);
// {"Date":"2023-08-02T16:01:20.9025406+00:00","TemperatureCelsius":26.6,"Summary":"Sunny"}

var forecastDeserialized = JsonSerializer.Deserialize<WeatherForecast>(serialized, SourceGenerationContext.Default.WeatherForecast);
Console.WriteLine(forecast == forecastDeserialized);
// True

public record WeatherForecast(DateTimeOffset Date, float TemperatureCelsius, string? Summary);

[JsonSourceGenerationOptions(WriteIndented = true)]
[JsonSerializable(typeof(WeatherForecast))]
internal partial class SourceGenerationContext : JsonSerializerContext
{
}

使用JSON DOM


using System;
using System.Text.Json;
using System.Text.Json.Nodes;

string jsonString =
@"{
  ""Date"": ""2019-08-01T00:00:00"",
  ""Temperature"": 25,
  ""Summary"": ""Hot"",
  ""DatesAvailable"": [
    ""2019-08-01T00:00:00"",
    ""2019-08-02T00:00:00""
  ],
  ""TemperatureRanges"": {
      ""Cold"": {
          ""High"": 20,
          ""Low"": -10
      },
      ""Hot"": {
          ""High"": 60,
          ""Low"": 20
      }
  }
}
";

JsonNode forecastNode = JsonNode.Parse(jsonString)!;


// Get value from a JsonNode.
JsonNode temperatureNode = forecastNode["Temperature"]!;
Console.WriteLine($"Type={temperatureNode.GetType()}");
Console.WriteLine($"JSON={temperatureNode.ToJsonString()}");
//output:
//Type = System.Text.Json.Nodes.JsonValue`1[System.Text.Json.JsonElement]
//JSON = 25

// Get a typed value from a JsonNode.
int temperatureInt = (int)forecastNode["Temperature"]!;
Console.WriteLine($"Value={temperatureInt}");
//output:
//Value=25

// Get a typed value from a JsonNode by using GetValue<T>.
temperatureInt = forecastNode["Temperature"]!.GetValue<int>();
Console.WriteLine($"TemperatureInt={temperatureInt}");
//output:
//Value=25

// Get a JSON object from a JsonNode.
JsonNode temperatureRanges = forecastNode["TemperatureRanges"]!;
Console.WriteLine($"Type={temperatureRanges.GetType()}");
Console.WriteLine($"JSON={temperatureRanges.ToJsonString()}");
//output:
//Type = System.Text.Json.Nodes.JsonObject
//JSON = { "Cold":{ "High":20,"Low":-10},"Hot":{ "High":60,"Low":20} }

// Get a JSON array from a JsonNode.
JsonNode datesAvailable = forecastNode["DatesAvailable"]!;
Console.WriteLine($"Type={datesAvailable.GetType()}");
Console.WriteLine($"JSON={datesAvailable.ToJsonString()}");
//output:
//datesAvailable Type = System.Text.Json.Nodes.JsonArray
//datesAvailable JSON =["2019-08-01T00:00:00", "2019-08-02T00:00:00"]

// Get an array element value from a JsonArray.
JsonNode firstDateAvailable = datesAvailable[0]!;
Console.WriteLine($"Type={firstDateAvailable.GetType()}");
Console.WriteLine($"JSON={firstDateAvailable.ToJsonString()}");
//output:
//Type = System.Text.Json.Nodes.JsonValue`1[System.Text.Json.JsonElement]
//JSON = "2019-08-01T00:00:00"

// Get a typed value by chaining references.
int coldHighTemperature = (int)forecastNode["TemperatureRanges"]!["Cold"]!["High"]!;
Console.WriteLine($"TemperatureRanges.Cold.High={coldHighTemperature}");
//output:
//TemperatureRanges.Cold.High = 20

// Parse a JSON array
JsonNode datesNode = JsonNode.Parse(@"[""2019-08-01T00:00:00"",""2019-08-02T00:00:00""]")!;
JsonNode firstDate = datesNode[0]!.GetValue<DateTime>();
Console.WriteLine($"firstDate={ firstDate}");
//output:
//firstDate = "2019-08-01T00:00:00"

使用低级JSON读取器/写入器类型

using System;
using System.IO;
using System.Text;
using System.Text.Json;

var writerOptions = new JsonWriterOptions
{
    Indented = true
};

using var stream = new MemoryStream();
using var writer = new Utf8JsonWriter(stream, writerOptions);

writer.WriteStartObject();
writer.WriteString("date", DateTimeOffset.Parse("8/2/2023 9:00 AM"));
writer.WriteNumber("temp", 42);
writer.WriteEndObject();
writer.Flush();

var jsonBytes = stream.ToArray();
string json = Encoding.UTF8.GetString(jsonBytes);
Console.WriteLine(json);
// {
//   "date": "2023-08-02T09:00:00+00:00"
//   "temp": 42
// }

var readerOptions = new JsonReaderOptions
{
    AllowTrailingCommas = true,
    CommentHandling = JsonCommentHandling.Skip
};
var reader = new Utf8JsonReader(jsonBytes, readerOptions);

while (reader.Read())
{
    Console.Write(reader.TokenType);

    switch (reader.TokenType)
    {
        case JsonTokenType.PropertyName:
        case JsonTokenType.String:
            {
                string? text = reader.GetString();
                Console.Write(" ");
                Console.Write(text);
                break;
            }

        case JsonTokenType.Number:
            {
                int intValue = reader.GetInt32();
                Console.Write(" ");
                Console.Write(intValue);
                break;
            }

            // Other token types elided for brevity
    }
    Console.WriteLine();
}
// StartObject
// PropertyName date
// String 2023-08-02T09:00:00+00:00
// PropertyName temp
// Number 42
// EndObject

主要类型:

本库提供的主要类型包括

  • System.Text.Json.Utf8JsonWriter
  • System.Text.Json.Utf8JsonReader
  • System.Text.Json.JsonSerializer
  • System.Text.Json.JsonConverter
  • System.Text.Json.JsonDocument
  • System.Text.Json.Nodes.JsonNode
  • System.Text.Json.Serialization.Metadata.JsonTypeInfo

其他文档:

反馈与贡献:

System.Text.Json作为开源软件发布,遵循MIT许可协议。欢迎在GitHub仓库提交错误报告和贡献。

产品: 兼容和额外的计算的.target框架版本。
.NET
.NET Core
.NET Standard
.NET Framework net461 已计算。 net462 兼容。 net463 已计算。 net47 已计算。 net471 已计算。 net472 已计算。 net48 已计算。 net481 已计算。
MonoAndroid monoandroid 已计算。
MonoMac monomac 已计算。
MonoTouch monotouch 已计算。
Tizen tizen40 已计算。 tizen60 已计算。
Xamarin.iOS xamarinios 已计算。
Xamarin.Mac xamarinmac 已计算。
Xamarin.TVOS xamarintvos 已计算。
Xamarin.WatchOS xamarinwatchos 已计算。
兼容的目标框架
包含的目标框架(在包中)
了解更多关于 目标框架.NET Standard 的信息。

NuGet 包 (6.5K)

显示依赖 System.Text.Json 的前 5 个 NuGet 包

下载
Microsoft.IdentityModel.Tokens

包含支持 SecurityTokens、加密操作:签名、验证签名、加密的类型。

Microsoft.Extensions.DependencyModel

提供读取 `.deps` 文件的功能。当 .NET 应用程序编译时,SDK 会生成一个包含应用程序依赖关系信息的 JSON 清单文件 (`<ApplicationName>.deps.json`)。您可以使用 `Microsoft.Extensions.DependencyModel` 在运行时读取此清单中的信息。当您需要动态编译代码(例如,使用 Roslyn Emit API)并引用与主应用程序相同的依赖项时,这很有用。默认情况下,依赖项清单包含关于应用程序的目标框架和运行时依赖项的信息。将 PreserveCompilationContext 项目的属性设置为 `true`,可以额外包含有关编译过程中使用的引用程序集的信息。

Microsoft.Extensions.Configuration.Json

Microsoft.Extensions.Configuration 的 JSON 配置提供程序实现。此包使您能够从 JSON 文件中读取应用程序的设置。您可以使用 IConfigurationBuilder 上的 JsonConfigurationExtensions.AddJsonFile 扩展方法将 JSON 配置提供程序添加到配置构建器中。

Azure.Core

这是 Azure 客户端管道的实现。

Microsoft.IdentityModel.Protocols.OpenIdConnect

包含支持 OpenIdConnect 协议的类型。

GitHub 仓库 (621)

显示依赖 System.Text.Json 的前 5 个最受欢迎的 GitHub 仓库

仓库 星标
jellyfin/jellyfin
免费软件媒体系统
microsoft/semantic-kernel
快速、轻松地将最前沿的 LLM 技术集成到您的应用程序中
dotnet/roslyn
Roslyn .NET 编译器为 C# 和 Visual Basic 提供丰富的代码分析 API。
dotnet/runtime
.NET 是适用于云、移动、桌面和 IoT 应用程序的跨平台运行时。
dotnet/efcore
EF Core 是一个现代的对象-数据库映射器,适用于 .NET。它支持 LINQ 查询、更改跟踪、更新和架构迁移。
版本 下载 最后更新
9.0.0-preview.7.24405.7 3,086 8/13/2024
9.0.0-preview.6.24327.7 69,566 7/9/2024
9.0.0-preview.5.24306.7 65,027 6/11/2024
9.0.0-preview.4.24266.19 55,453 5/21/2024
9.0.0-preview.3.24172.9 146,650 4/11/2024
9.0.0-preview.2.24128.5 68,802 3/12/2024
9.0.0-preview.1.24080.9 100,098 2/13/2024
8.0.4 6,447,345 7/9/2024
8.0.3 9,200,254 3/12/2024 版本 8.0.3 至少有一个高严重性的漏洞。
8.0.2 5,298,568 2/13/2024 版本 8.0.2 至少有一个高严重性的漏洞。
8.0.1 5,736,190 1/9/2024 版本 8.0.1 至少有一个高严重性的漏洞。
8.0.0 88,265,491 11/14/2023 8.0.0 至少存在一个严重的安全漏洞。
8.0.0-rc.2.23479.6 817,978 10/10/2023 8.0.0-rc.2.23479.6 至少存在一个严重的安全漏洞。
8.0.0-rc.1.23419.4 327,433 9/12/2023 8.0.0-rc.1.23419.4 至少存在一个严重的安全漏洞。
8.0.0-preview.7.23375.6 247,094 8/8/2023 8.0.0-preview.7.23375.6 至少存在一个严重的安全漏洞。
8.0.0-preview.6.23329.7 289,902 7/11/2023 8.0.0-preview.6.23329.7 至少存在一个严重的安全漏洞。
8.0.0-preview.5.23280.8 194,859 6/13/2023 8.0.0-preview.5.23280.8 至少存在一个严重的安全漏洞。
8.0.0-preview.4.23259.5 351,743 5/16/2023 8.0.0-preview.4.23259.5 至少存在一个严重的安全漏洞。
8.0.0-preview.3.23174.8 356,536 4/11/2023 8.0.0-preview.3.23174.8 至少存在一个严重的安全漏洞。
8.0.0-preview.2.23128.3 357,643 3/14/2023 8.0.0-preview.2.23128.3 至少存在一个严重的安全漏洞。
8.0.0-preview.1.23110.8 217,851 2/21/2023 8.0.0-preview.1.23110.8 至少存在一个严重的安全漏洞。
7.0.4 1,850,092 11/14/2023 7.0.4 至少存在一个严重的安全漏洞。
7.0.3 49,526,046 6/13/2023 7.0.3 至少存在一个严重的安全漏洞。
7.0.2 43,381,465 2/14/2023 7.0.2 至少存在一个严重的安全漏洞。
7.0.1 24,458,032 12/13/2022 7.0.1 至少存在一个高严重程度的安全漏洞。
7.0.0 161,397,864 11/7/2022 7.0.0 至少存在一个高严重程度的安全漏洞。
7.0.0-rc.2.22472.3 308,148 10/11/2022
7.0.0-rc.1.22426.10 255,389 9/14/2022
7.0.0-preview.7.22375.6 276,415 8/9/2022
7.0.0-preview.6.22324.4 143,715 7/12/2022
7.0.0-preview.5.22301.12 96,597 6/14/2022
7.0.0-preview.4.22229.4 138,821 5/10/2022
7.0.0-preview.3.22175.4 117,491 4/13/2022
7.0.0-preview.2.22152.2 87,742 3/14/2022
7.0.0-preview.1.22076.8 89,042 2/17/2022
6.0.9 4,472,209 11/14/2023
6.0.8 10,676,771 6/13/2023
6.0.7 29,599,470 11/7/2022
6.0.6 24,297,369 9/13/2022
6.0.5 54,203,117 6/14/2022
6.0.4 15,946,198 5/10/2022
6.0.3 10,696,658 4/12/2022
6.0.2 49,415,199 2/8/2022
6.0.1 31,556,417 12/14/2021
6.0.0 356,282,916 11/8/2021
6.0.0-rc.2.21480.5 599,959 10/12/2021
6.0.0-rc.1.21451.13 384,161 9/14/2021
6.0.0-preview.7.21377.19 293,313 8/10/2021
6.0.0-preview.6.21352.12 160,128 7/14/2021
6.0.0-preview.5.21301.5 119,992 6/15/2021
6.0.0-preview.4.21253.7 100,495 5/24/2021
6.0.0-preview.3.21201.4 284,919 4/8/2021
6.0.0-preview.2.21154.6 154,926 3/11/2021
6.0.0-preview.1.21102.12 202,545 2/12/2021
5.0.2 129,693,163 4/6/2021 5.0.2 已弃用,因为它不再维护。
5.0.1 49,234,748 1/12/2021 5.0.1 已弃用,因为它不再维护。
5.0.0 104,357,472 11/9/2020 5.0.0 已弃用,因为它不再维护。
5.0.0-rc.2.20475.5 212,869 10/13/2020
5.0.0-rc.1.20451.14 361,481 9/14/2020
5.0.0-preview.8.20407.11 108,585 8/25/2020
5.0.0-preview.7.20364.11 256,082 7/21/2020
5.0.0-preview.6.20305.6 78,406 6/25/2020
5.0.0-preview.5.20278.1 87,882 6/10/2020
5.0.0-preview.4.20251.6 158,670 5/18/2020
5.0.0-preview.3.20214.6 323,485 4/23/2020
5.0.0-preview.2.20160.6 165,894 4/2/2020
5.0.0-preview.1.20120.5 88,007 3/16/2020
4.7.2 504,218,282 5/12/2020
4.7.1 60,506,014 2/18/2020
4.7.0 116,825,443 12/3/2019
4.7.0-preview3.19551.4 312,675 11/13/2019
4.7.0-preview2.19523.17 64,760 11/1/2019
4.7.0-preview1.19504.10 91,418 10/15/2019
4.6.0 501,370,388 9/23/2019
4.6.0-rc1.19456.4 184,664 9/16/2019
4.6.0-preview9.19421.4 503,296 9/4/2019
4.6.0-preview9.19416.11 1,245 9/4/2019
4.6.0-preview8.19405.3 182,463 8/13/2019
4.6.0-preview7.19362.9 247,781 7/23/2019
4.6.0-preview6.19303.8 235,263 6/12/2019
4.6.0-preview6.19264.9 4,840 9/4/2019
4.6.0-preview6.19259.10 25,436 5/10/2019