C# – How to read problem details JSON with HttpClient

Problem details (RFC7807) is a standardized error response format that has a Content-Type of application/problem+json, an error response code (i.e. 400 – Bad Request), and has a response body that looks like this: This can be extended to include any number of properties. The example shown above comes from the default way ASP.NET Core returns … Read more

C# – JSON object contains a trailing comma at the end which is not supported

Problem When you deserialize JSON, you get the following error: The JSON object contains a trailing comma at the end which is not supported in this mode. Change the reader options. JSON properties are separated with commas. A trailing comma is one that has no properties after it. Here’s an example of a trailing comma: … Read more

C# – Deserialize JSON using different property names

When JSON property names and class property names are different, and you can’t just change the names to match, you have three options: Use the JsonPropertyName attribute. Use a naming policy (built-in or custom). A combination of these two. In other words, use JsonPropertyName for special cases that your naming policy doesn’t handle. These affect … Read more

C# – Deserialize JSON with a specific constructor

When your class has multiple constructors, you can use the JsonConstructor attribute to specify which constructor to use during deserialization. Here’s an example: Note: JsonConstructor for System.Text.Json was added in .NET 5. Now deserialize: This outputs: This shows that it used the Person(int luckyNumber) constructor. It passed in the LuckyNumber JSON property to the constructor, … Read more

C# – Deserialize a JSON array to a list

When you’re working with a JSON array, you can deserialize it to a list like this: This deserializes all of the objects in the JSON array into a List<Movie>. You can use this list object like usual. Note: All examples will use System.Collections.Generic and System.Text.Json. I’ll exclude the using statements for brevity. Example – JSON … Read more

C# – Deserialize JSON as a stream

Here’s an example of deserializing a JSON file as a stream with System.Text.Json: Stream deserialization has three main benefits: It’s memory-efficient, which improves overall performance. Fail fast when there’s a problem in the JSON data. Deserialization process can be canceled (async version only). In this article, I’ll go into details about these benefits and show … Read more

System.Text.Json – Deserialize properties that aren’t part of the class

Use the JsonExtensionData attribute to simplify accepting additional properties in JSON that aren’t part of the class you’re deserializing to. To use this attribute, add a compatible* property to the class and apply the JsonExtensionData attribute: *Compatible property types you can use are Dictionary<string, object>, Dictionary<string, JsonElement> and JsonObject. Any property in the JSON that’s … Read more

C# – Convert an object to JSON and vice versa

The simplest way to convert an object to JSON (serialization) is to use the built-in System.Text.Json.JsonSerializer: This serializes the Movie object to JSON using the default serialization settings (notice it’s not pretty printed by defualt). Here’s the JSON this produces: To do the opposite – convert a JSON string to an object (deserialization) – use … Read more

C# – Deserializing JSON with quoted numbers

There are two ways to represent numbers in JSON: as number literals (ex: 123) or as quoted numbers (ex: “123”). In this article, I’ll explain how quoted numbers are handled during deserialization in Newtonsoft and System.Text.Json and how to change the behavior. At the end, I’ll show how to write quoted numbers during serialization. Quoted … Read more