Deserialization is the process of taking a string representation of an object and creating that object in memory. JSON is an ever-increasingly popular format to serialize objects into. It has become nearly ubiquitous in API communication. In this article, we will take a look at two ways to execute the JSON deserialization to a POCO class in C# using System.Text.Json
and Newtonsoft.Json
libraries.
Let’s start.
Deserialize JSON to a POCO Class
In the next sections, we will take a look at how we can deserialize a JSON string into an instance of a POCO class object.
JSON Deserialization to a POCO Class With System.Text.Json
First, let’s take a look at deserializing with the .NET System.Text.Json
library. This library is standard with .NET and all we need to do to be able to use it is to add using System.Text.Json;
to the file we are working with.
Let’s start by defining a JSON object in a file:
// JSON/HondaCivic.json { "make": "Honda", "model": "Civic", "year": 2015, "features": [ "ABS", "Automatic locks", "Power windows" ] }
Now that we have a serialized object in JSON, we can deserialize it into our POCO Car
class:
using System.Text.Json.Serialization; public class Car { [JsonPropertyName("make")] public string Make { get; set; } = default!; [JsonPropertyName("model")] public string Model { get; set; } = default!; [JsonPropertyName("year")] public int Year { get; set; } = default!; [JsonPropertyName("features")] public IEnumerable<string> Features { get; set; } = default!; }
In this class, we create class members to match the fields in the expected JSON object we are trying to deserialize. Additionally, we decorate the properties with the JsonPropertyName()
attribute. This attribute is only required for System.Text.Json
, we don’t have to use it with Newtonsoft.Json
.
Next, let’s modify the Program
class:
public static void Main() { // Read JSON file. This could also be a DB or API response. var jsonStr = File.ReadAllText("JSON/HondaCivic.json"); // Deserialize to get an object of type Car DeserializedJsonCar = JsonSerializer.Deserialize<Car>(jsonStr)!; }
We read JSON from a file using the ReadAllText
method, and deserialize it to the DeserializeJsonCar
property using the JsonSerializer.Deserialize
method. Note that the source of the JSON can be more than a text file. JSON can come from a database or an API response.
That’s it, we are done! We have recovered the state of the Car
in the JSON file by deserializing the JSON into an object in memory.
JSON Deserialization to a POCO Class With Newtonsoft.Json
Next, we are going to take a look at the same example but this time we will use Newtonsoft.Json
. This article explains the difference between these two libraries in greater detail.
First, let’s bring in Newtonsoft.Json
as a dependency. We can do this by installing the Newtonsoft.Json
NuGet package via the Visual Studio NuGet Package Manager Console:
Install-Package Newtonsoft.Json
Once this dependency is installed we can import Newtonsoft.Json
into our code.
Now, we are ready to deserialize our JSON object into a Car
object:
public static void Main() { var jsonStr = File.ReadAllText("JSON/HondaCivic.json"); NewtonsoftDeserializedJsonCar = JsonConvert.DeserializeObject<Car>(jsonStr)!; }
We can see that the process with Newtonsoft.Json
is quite similar to the one with System.Text.Json
. Just, in this case, we are using the JsonConvert
class to call the Deserialize
method.
Conclusion
In summary, we have covered two options to deserialize JSON into a POCO class in C#. Even though we’ve deserialized JSON from a file, the source of the JSON can also be a database or API. Using JSON is a great way to transfer data from the backend to a web app or desktop application. Moreover, we can keep the state of the object intact.