System.Text.Json 8.0.4
前缀已保留
查看下面的版本列表以获取详细信息。
dotnet add package System.Text.Json --version 8.0.4
NuGet\Install-Package System.Text.Json -Version 8.0.4
<PackageReference Include="System.Text.Json" Version="8.0.4" />
paket add System.Text.Json --version 8.0.4
#r "nuget: System.Text.Json, 8.0.4"
// 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.Memory.Data
- HttpContent的序列化:System.Net.Http.Json
反馈与贡献:
产品: | 版本 兼容和额外的计算的.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 Framework 4.6.2
- Microsoft.Bcl.AsyncInterfaces (>= 8.0.0)
- System.Buffers (>= 4.5.1)
- System.Memory (>= 4.5.5)
- System.Runtime.CompilerServices.Unsafe (>= 6.0.0)
- System.Text.Encodings.Web (>= 8.0.0)
- System.Threading.Tasks.Extensions (>= 4.5.4)
- System.ValueTuple (>= 4.5.0)
-
.NET Standard 2.0
- Microsoft.Bcl.AsyncInterfaces (>= 8.0.0)
- System.Buffers (>= 4.5.1)
- System.Memory (>= 4.5.5)
- System.Runtime.CompilerServices.Unsafe (>= 6.0.0)
- System.Text.Encodings.Web (>= 8.0.0)
- System.Threading.Tasks.Extensions (>= 4.5.4)
-
net6.0
- System.Runtime.CompilerServices.Unsafe (>= 6.0.0)
- System.Text.Encodings.Web (>= 8.0.0)
-
net7.0
- System.Text.Encodings.Web (>= 8.0.0)
-
net8.0
- System.Text.Encodings.Web (>= 8.0.0)
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.2 | 5,298,568 | 2/13/2024 | |
8.0.1 | 5,736,190 | 1/9/2024 | |
8.0.0 | 88,265,491 | 11/14/2023 | |
8.0.0-rc.2.23479.6 | 817,978 | 10/10/2023 | |
8.0.0-rc.1.23419.4 | 327,433 | 9/12/2023 | |
8.0.0-preview.7.23375.6 | 247,094 | 8/8/2023 | |
8.0.0-preview.6.23329.7 | 289,902 | 7/11/2023 | |
8.0.0-preview.5.23280.8 | 194,859 | 6/13/2023 | |
8.0.0-preview.4.23259.5 | 351,743 | 5/16/2023 | |
8.0.0-preview.3.23174.8 | 356,536 | 4/11/2023 | |
8.0.0-preview.2.23128.3 | 357,643 | 3/14/2023 | |
8.0.0-preview.1.23110.8 | 217,851 | 2/21/2023 | |
7.0.4 | 1,850,092 | 11/14/2023 | |
7.0.3 | 49,526,046 | 6/13/2023 | |
7.0.2 | 43,381,465 | 2/14/2023 | |
7.0.1 | 24,458,032 | 12/13/2022 | |
7.0.0 | 161,397,864 | 11/7/2022 | |
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.1 | 49,234,748 | 1/12/2021 | |
5.0.0 | 104,357,472 | 11/9/2020 | |
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 |