JSON serialization and deserialization (marshalling and unmarshalling) in .NET - overview

The System.Text.Json namespace provides functionality for serializing to and deserializing from JavaScript Object Notation (JSON).

The library design emphasizes high performance and low memory allocation over an extensive feature set. Built-in UTF-8 support optimizes the process of reading and writing JSON text encoded as UTF-8, which is the most prevalent encoding for data on the web and files on disk.

The library also provides classes for working with an in-memory document object model (DOM). This feature enables random read-only access of the elements in a JSON file or string.

There are some limitations on what parts of the library that you can use from Visual Basic code. For more information, see Visual Basic support.

Run-time reflection vs. compile-time source generation

By default, System.Text.Json uses run-time reflection to gather the metadata it needs to access properties of objects for serialization and deserialization. As an alternative, System.Text.Json can use the C# source generation feature to improve performance, reduce private memory usage, and facilitate assembly trimming, which reduces app size. For more information, see How to choose reflection or source generation in System.Text.Json.

How to get the library

The library is built-in as part of the shared framework for .NET Core 3.0 and later versions. The source generation feature is built-in as part of the shared framework for .NET 6 and later versions. Use of source generation requires .NET 5 SDK or later.

For framework versions earlier than .NET Core 3.0, install the System.Text.Json NuGet package. The package supports:

  • .NET Standard 2.0 and later
  • .NET Framework 4.7.2 and later
  • .NET Core 2.1 and later
  • .NET 5 and later

Security information

For information about security threats that were considered when designing JsonSerializer, and how they can be mitigated, see System.Text.Json Threat Model.

Thread safety

  • The System.Text.Json types are thread-safe, including:

Additional resources