System.Text.Json 10.0.2
About
Provides high-performance and low-allocating types that serialize objects to JavaScript Object Notation (JSON) text and deserialize JSON text to objects, with UTF-8 support built-in. Also provides types to read and write JSON text encoded as UTF-8, and to create an in-memory document object model (DOM), that is read-only, for random access of the JSON elements within a structured view of the data.
Key Features
- High-performance reader and writer types for UTF-8 encoded JSON.
- A fully-featured JSON serializer for .NET types using reflection or source generated contracts.
- A high-performance read-only JSON DOM (JsonDocument) and a mutable DOM that interoperates with the serializer (JsonNode).
- Built-in support for async serialization, including IAsyncEnumerable support.
- Fully customizable contract model for serializable types.
How to Use
The System.Text.Json library is built-in as part of the shared framework in .NET Runtime. The package can be installed when you need to use the most recent version in older target frameworks.
Serialization:
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);
Serialization using the source generator:
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
{
}
Using the 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"
Using the low-level JSON reader/writer types
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
Main Types
The main types provided by this library are:
System.Text.Json.Utf8JsonWriterSystem.Text.Json.Utf8JsonReaderSystem.Text.Json.JsonSerializerSystem.Text.Json.JsonConverterSystem.Text.Json.JsonDocumentSystem.Text.Json.Nodes.JsonNodeSystem.Text.Json.Serialization.Metadata.JsonTypeInfo
Additional Documentation
Related Packages
- Lightweight data formats abstraction: System.Memory.Data
- Serialization of HttpContent: System.Net.Http.Json
Feedback & Contributing
System.Text.Json is released as open source under the MIT license. Bug reports and contributions are welcome at the GitHub repository.
Showing the top 20 packages that depend on System.Text.Json.
| Packages | Downloads |
|---|---|
|
Swashbuckle.AspNetCore.SwaggerGen
Swagger Generator for APIs built on ASP.NET Core
|
23 |
|
Microsoft.AspNetCore.Http.Connections.Common
Common primitives for ASP.NET Connection Handlers and clients
This package was built from the source code at https://github.com/dotnet/aspnetcore/tree/af22effae4069a5dfb9b0735859de48820104f5b
|
22 |
|
Microsoft.AspNetCore.Http.Connections.Common
Common primitives for ASP.NET Connection Handlers and clients
This package was built from the source code at https://github.com/dotnet/aspnetcore/tree/36be7ed6d6d56b7da0a2891e3de7ecc2aa48eecd
|
22 |
|
Microsoft.AspNetCore.SignalR.Common
Common serialization primitives for SignalR Clients Servers
This package was built from the source code at https://github.com/dotnet/aspnetcore/tree/704f7cb1d2cea33afb00c2097731216f121c2c73
|
22 |
|
CefSharp.Common.NETCore
The CefSharp Chromium-based browser component ('Core' and common 'Element' components, needed by both WPF, WinForms and OffScreen implementations).
|
22 |
|
Microsoft.AspNetCore.SignalR.Common
Common serialization primitives for SignalR Clients Servers
This package was built from the source code at https://github.com/dotnet/aspnetcore/tree/c2a442982e736e17ae6bcadbfd8ccba278ee1be6
|
21 |
|
Microsoft.AspNetCore.Http.Connections.Common
Common primitives for ASP.NET Connection Handlers and clients
This package was built from the source code at https://github.com/dotnet/aspnetcore/tree/c2a442982e736e17ae6bcadbfd8ccba278ee1be6
|
21 |
|
CefSharp.Common.NETCore
The CefSharp Chromium-based browser component ('Core' and common 'Element' components, needed by both WPF, WinForms and OffScreen implementations).
|
21 |
|
Swashbuckle.AspNetCore.SwaggerUI
Middleware to expose an embedded version of the swagger-ui from an ASP.NET Core application
|
21 |
|
Microsoft.AspNetCore.SignalR.Common
Common serialization primitives for SignalR Clients Servers
This package was built from the source code at https://github.com/dotnet/aspnetcore/tree/af22effae4069a5dfb9b0735859de48820104f5b
|
21 |
|
Swashbuckle.AspNetCore.SwaggerGen
Swagger Generator for APIs built on ASP.NET Core
|
21 |
|
Microsoft.AspNetCore.Http.Connections.Common
Common primitives for ASP.NET Connection Handlers and clients
This package was built from the source code at https://github.com/aspnet/AspNetCore/tree/9699b939f94b7524a178821d78addefa5af5d750
|
21 |
|
Microsoft.AspNetCore.Http.Connections.Common
Common primitives for ASP.NET Connection Handlers and clients
This package was built from the source code at https://github.com/aspnet/AspNetCore/tree/331b52b370cd4e7fe2919d4d4cda27412e2ab1cc
|
21 |
|
Microsoft.AspNetCore.Http.Connections.Common
Common primitives for ASP.NET Connection Handlers and clients
This package was built from the source code at https://github.com/aspnet/AspNetCore/tree/440dadc05b2bed38e6a726c2492db90e77d43c62
|
21 |
|
Microsoft.AspNetCore.Http.Connections.Common
Common primitives for ASP.NET Connection Handlers and clients
This package was built from the source code at https://github.com/aspnet/AspNetCore/tree/1bf292d47ac2a0ebda07d8a3f00355dd01915ad5
|
21 |
|
Microsoft.AspNetCore.SignalR.Common
Common serialization primitives for SignalR Clients Servers
This package was built from the source code at https://github.com/dotnet/aspnetcore/tree/610fe433e07b32ed451ed99d07df63be47c29050
|
21 |
|
Microsoft.AspNetCore.SignalR.Common
Common serialiation primitives for SignalR Clients Servers
This package was built from the source code at https://github.com/dotnet/aspnetcore/tree/0bc3c376f0cd14335e8b3afca69596acabeb1f80
|
21 |
|
Microsoft.AspNetCore.SignalR.Common
Common serialization primitives for SignalR Clients Servers
This package was built from the source code at https://github.com/dotnet/aspnetcore/tree/31d685b2d9a86ca1243014d175a3da813f78e428
|
21 |
|
Microsoft.AspNetCore.SignalR.Common
Common serialiation primitives for SignalR Clients Servers
This package was built from the source code at https://github.com/aspnet/AspNetCore/tree/440dadc05b2bed38e6a726c2492db90e77d43c62
|
21 |
|
Microsoft.AspNetCore.SignalR.Common
Common serialiation primitives for SignalR Clients Servers
This package was built from the source code at https://github.com/aspnet/AspNetCore/tree/535da07711bd5e2d8e44c0ea10bd2c8be1a9a584
|
21 |
.NET Framework 4.6.2
- Microsoft.Bcl.AsyncInterfaces (>= 10.0.2)
- System.ValueTuple (>= 4.6.1)
- System.Threading.Tasks.Extensions (>= 4.6.3)
- System.Runtime.CompilerServices.Unsafe (>= 6.1.2)
- System.Memory (>= 4.6.3)
- System.Buffers (>= 4.6.1)
- System.Text.Encodings.Web (>= 10.0.2)
- System.IO.Pipelines (>= 10.0.2)
.NET Standard 2.0
- System.Threading.Tasks.Extensions (>= 4.6.3)
- System.Runtime.CompilerServices.Unsafe (>= 6.1.2)
- System.Memory (>= 4.6.3)
- System.Buffers (>= 4.6.1)
- System.Text.Encodings.Web (>= 10.0.2)
- System.IO.Pipelines (>= 10.0.2)
- Microsoft.Bcl.AsyncInterfaces (>= 10.0.2)
.NET 9.0
- System.Text.Encodings.Web (>= 10.0.2)
- System.IO.Pipelines (>= 10.0.2)
.NET 10.0
- No dependencies.
.NET 8.0
- System.IO.Pipelines (>= 10.0.2)
- System.Text.Encodings.Web (>= 10.0.2)
| Version | Downloads | Last updated |
|---|---|---|
| 11.0.0-preview.2.26159.112 | 3 | 03/12/2026 |
| 11.0.0-preview.1.26104.118 | 3 | 02/19/2026 |
| 10.0.5 | 3 | 03/12/2026 |
| 10.0.4 | 3 | 03/12/2026 |
| 10.0.3 | 3 | 02/19/2026 |
| 10.0.2 | 3 | 02/09/2026 |
| 10.0.1 | 6 | 12/10/2025 |
| 10.0.0 | 7 | 12/09/2025 |
| 10.0.0-rc.2.25502.107 | 11 | 10/26/2025 |
| 10.0.0-rc.1.25451.107 | 12 | 09/10/2025 |
| 10.0.0-preview.7.25380.108 | 13 | 09/05/2025 |
| 10.0.0-preview.6.25358.103 | 14 | 07/30/2025 |
| 10.0.0-preview.5.25277.114 | 14 | 07/30/2025 |
| 10.0.0-preview.4.25258.110 | 14 | 05/22/2025 |
| 10.0.0-preview.3.25171.5 | 15 | 05/22/2025 |
| 10.0.0-preview.2.25163.2 | 16 | 03/20/2025 |
| 10.0.0-preview.1.25080.5 | 16 | 02/26/2025 |
| 9.0.14 | 3 | 03/12/2026 |
| 9.0.13 | 3 | 02/19/2026 |
| 9.0.12 | 3 | 02/09/2026 |
| 9.0.11 | 7 | 12/10/2025 |
| 9.0.10 | 11 | 10/27/2025 |
| 9.0.9 | 12 | 09/10/2025 |
| 9.0.8 | 13 | 09/05/2025 |
| 9.0.7 | 14 | 07/30/2025 |
| 9.0.6 | 14 | 07/30/2025 |
| 9.0.5 | 15 | 05/22/2025 |
| 9.0.4 | 16 | 04/16/2025 |
| 9.0.3 | 16 | 03/20/2025 |
| 9.0.2 | 17 | 02/18/2025 |
| 9.0.1 | 17 | 02/18/2025 |
| 9.0.0 | 18 | 11/18/2024 |
| 9.0.0-rc.2.24473.5 | 16 | 02/18/2025 |
| 9.0.0-rc.1.24431.7 | 16 | 02/18/2025 |
| 9.0.0-preview.7.24405.7 | 15 | 05/22/2025 |
| 9.0.0-preview.6.24327.7 | 15 | 05/22/2025 |
| 9.0.0-preview.5.24306.7 | 15 | 05/22/2025 |
| 9.0.0-preview.4.24266.19 | 17 | 02/18/2025 |
| 9.0.0-preview.3.24172.9 | 15 | 05/22/2025 |
| 9.0.0-preview.2.24128.5 | 15 | 05/22/2025 |
| 9.0.0-preview.1.24080.9 | 16 | 02/27/2025 |
| 8.0.6 | 14 | 07/30/2025 |
| 8.0.5 | 18 | 02/18/2025 |
| 8.0.4 | 17 | 02/18/2025 |
| 8.0.3 | 17 | 02/18/2025 |
| 8.0.2 | 17 | 02/18/2025 |
| 8.0.1 | 18 | 02/18/2025 |
| 8.0.0 | 17 | 02/18/2025 |
| 8.0.0-rc.2.23479.6 | 16 | 02/18/2025 |
| 8.0.0-rc.1.23419.4 | 16 | 02/18/2025 |
| 8.0.0-preview.7.23375.6 | 15 | 05/22/2025 |
| 8.0.0-preview.6.23329.7 | 15 | 05/22/2025 |
| 8.0.0-preview.5.23280.8 | 15 | 05/23/2025 |
| 8.0.0-preview.4.23259.5 | 15 | 05/22/2025 |
| 8.0.0-preview.3.23174.8 | 15 | 05/22/2025 |
| 8.0.0-preview.2.23128.3 | 15 | 05/23/2025 |
| 8.0.0-preview.1.23110.8 | 14 | 05/23/2025 |
| 7.0.4 | 17 | 02/18/2025 |
| 7.0.3 | 17 | 02/18/2025 |
| 7.0.2 | 17 | 02/18/2025 |
| 7.0.1 | 17 | 02/18/2025 |
| 7.0.0 | 17 | 02/18/2025 |
| 7.0.0-rc.2.22472.3 | 16 | 02/18/2025 |
| 7.0.0-rc.1.22426.10 | 16 | 02/18/2025 |
| 7.0.0-preview.7.22375.6 | 16 | 02/27/2025 |
| 7.0.0-preview.6.22324.4 | 16 | 02/27/2025 |
| 7.0.0-preview.5.22301.12 | 17 | 02/18/2025 |
| 7.0.0-preview.4.22229.4 | 15 | 05/23/2025 |
| 7.0.0-preview.3.22175.4 | 15 | 05/22/2025 |
| 7.0.0-preview.2.22152.2 | 15 | 05/23/2025 |
| 7.0.0-preview.1.22076.8 | 16 | 02/27/2025 |
| 6.0.11 | 17 | 02/18/2025 |
| 6.0.10 | 17 | 02/18/2025 |
| 6.0.9 | 17 | 02/18/2025 |
| 6.0.8 | 17 | 02/18/2025 |
| 6.0.7 | 17 | 02/18/2025 |
| 6.0.6 | 17 | 02/18/2025 |
| 6.0.5 | 17 | 02/18/2025 |
| 6.0.4 | 17 | 02/18/2025 |
| 6.0.3 | 17 | 02/18/2025 |
| 6.0.2 | 17 | 02/18/2025 |
| 6.0.1 | 17 | 02/18/2025 |
| 6.0.0 | 17 | 02/18/2025 |
| 6.0.0-rc.2.21480.5 | 16 | 02/18/2025 |
| 6.0.0-rc.1.21451.13 | 16 | 02/18/2025 |
| 6.0.0-preview.7.21377.19 | 17 | 02/18/2025 |
| 6.0.0-preview.6.21352.12 | 17 | 02/18/2025 |
| 6.0.0-preview.5.21301.5 | 15 | 05/22/2025 |
| 6.0.0-preview.4.21253.7 | 17 | 02/18/2025 |
| 6.0.0-preview.3.21201.4 | 16 | 02/27/2025 |
| 6.0.0-preview.2.21154.6 | 15 | 05/22/2025 |
| 6.0.0-preview.1.21102.12 | 17 | 02/18/2025 |
| 5.0.2 | 17 | 02/18/2025 |
| 5.0.1 | 17 | 02/18/2025 |
| 5.0.0 | 17 | 02/18/2025 |
| 5.0.0-rc.2.20475.5 | 16 | 02/18/2025 |
| 5.0.0-rc.1.20451.14 | 16 | 02/18/2025 |
| 5.0.0-preview.8.20407.11 | 17 | 02/18/2025 |
| 5.0.0-preview.7.20364.11 | 17 | 02/18/2025 |
| 5.0.0-preview.6.20305.6 | 15 | 05/23/2025 |
| 5.0.0-preview.5.20278.1 | 15 | 05/22/2025 |
| 5.0.0-preview.4.20251.6 | 15 | 05/22/2025 |
| 5.0.0-preview.3.20214.6 | 15 | 05/22/2025 |
| 5.0.0-preview.2.20160.6 | 14 | 05/23/2025 |
| 5.0.0-preview.1.20120.5 | 14 | 05/23/2025 |
| 4.7.2 | 17 | 02/18/2025 |
| 4.7.1 | 17 | 02/18/2025 |
| 4.7.0 | 17 | 02/18/2025 |
| 4.7.0-preview3.19551.4 | 16 | 02/18/2025 |
| 4.7.0-preview2.19523.17 | 17 | 02/18/2025 |
| 4.7.0-preview1.19504.10 | 17 | 02/18/2025 |
| 4.6.0 | 17 | 02/18/2025 |
| 4.6.0-rc1.19456.4 | 17 | 02/18/2025 |
| 4.6.0-preview9.19421.4 | 16 | 02/18/2025 |
| 4.6.0-preview9.19416.11 | 16 | 02/18/2025 |
| 4.6.0-preview8.19405.3 | 17 | 02/18/2025 |
| 4.6.0-preview7.19362.9 | 17 | 02/18/2025 |
| 4.6.0-preview6.19303.8 | 16 | 02/18/2025 |
| 4.6.0-preview6.19264.9 | 17 | 02/18/2025 |
| 4.6.0-preview6.19259.10 | 17 | 02/18/2025 |