C# Newtonsoft Json.NET
last modified July 5, 2023
C# Json.NET tutorial shows how to work with JSON data using Newtonsoft Json.NET library.
JSON
JSON (JavaScript Object Notation) is a lightweight data-interchange format. It
is easily read and written by humans and parsed and generated by machines. The
application/json
is the official Internet media type for JSON. The
JSON filename extension is .json
.
Newtonsoft Json.NET is a popular high-performance JSON framework for .NET.
In this article we work with Newtonsoft Json.NET
library. In the
standard library, we can alternatively use System.Text.Json
.
JsonConvert
provides methods for converting between .NET types and
JSON types. JsonConvert.SerializeObject
serializes the specified
object to a JSON string. JsonConvert.DeserializeObject
deserializes
the JSON to a .NET object.
Json.NET serialize object
In the following example, we serialize an object to a JSON string.
using Newtonsoft.Json; var p = new Product("Product A", new DateTime(2021, 12, 28), new string[] { "small" }); var json = JsonConvert.SerializeObject(p); Console.WriteLine(json); record Product(string Name, DateTime Created, string[] Sizes);
A product record is transformed into s JSON strring.
$ dotnet run {"Name":"Product A","Created":"2021-12-28T00:00:00","Sizes":["small"]}
Json.NET deserialize into object
The next example serializes the generated JSON string back into the .NET type.
using Newtonsoft.Json; var json = @"{""Name"":""Product A"",""Created"":""2021-12-28T00:00:00"",""Sizes"":[""small""]}"; Product? p = JsonConvert.DeserializeObject<Product>(json); Console.WriteLine(p); record Product(string Name, DateTime Created, string[] Sizes);
We transform the JSON string back into the record type.
Product? p = JsonConvert.DeserializeObject<Product>(json);
Inside the angle brackets, we specify the requested .NET type.
$ dotnet run Product { Name = Product A, Created = 12/28/2021 12:00:00 AM, Sizes = System.String[] }
Json.NET serialize list
In the next example, we serialize a list.
using Newtonsoft.Json; var words = new List<string> { "war", "water", "cup", "forest", "falcon", "snow", "chair", "book" }; string data = JsonConvert.SerializeObject(words); Console.WriteLine(data); var users = new List<User> { new User("John Doe", "gardener"), new User("Roger Roe", "driver"), new User("Lucia Novak", "teacher") }; string data2 = JsonConvert.SerializeObject(users); Console.WriteLine(data2); record User(string Name, string Occupation);
The program turns a list of strings and user objects into JSON strings using
JsonConvert.SerializeObject
.
$ dotnet run ["war","water","cup","forest","falcon","snow","chair","book"] [{"Name":"John Doe","Occupation":"gardener"},{"Name":"Roger Roe","Occupation":"driver"}, {"Name":"Lucia Novak","Occupation":"teacher"}]
Json.NET deserialize list
The next example deserializes lists.
using Newtonsoft.Json; string json1 = @"[""war"",""water"",""cup"",""forest"",""falcon"",""snow"",""chair"",""book""]"; string json2 = @"[{""Name"":""John Doe"",""Occupation"":""gardener""},{""Name"":""Roger Roe"",""Occupation"":""driver""}, {""Name"":""Lucia Novak"",""Occupation"":""teacher""}]"; List<string>? words = JsonConvert.DeserializeObject<List<string>>(json1); if (words != null) { Console.WriteLine(string.Join(',', words)); } List<User>? users = JsonConvert.DeserializeObject<List<User>>(json2); if (users != null) { Console.WriteLine(string.Join(',', users)); } record User(string Name, string Occupation);
The program transforms the two JSON strings back into a list of strings and a list of user objects.
$ dotnet run war,water,cup,forest,falcon,snow,chair,book User { Name = John Doe, Occupation = gardener },User { Name = Roger Roe, Occupation = driver },User { Name = Lucia Novak, Occupation = teacher }
Json.NET pretty print
The following example prettifies the JSON output.
using Newtonsoft.Json; var settings = new JsonSerializerSettings { Formatting = Newtonsoft.Json.Formatting.Indented }; var users = new List<User> { new User("John Doe", "gardener"), new User("Roger Roe", "driver"), new User("Lucia Novak", "teacher") }; string data = JsonConvert.SerializeObject(users, settings); Console.WriteLine(data); record User(string Name, string Occupation);
We use JsonSerializerSettings
to modify the JSON output.
var settings = new JsonSerializerSettings { Formatting = Newtonsoft.Json.Formatting.Indented };
We set the Newtonsoft.Json.Formatting.Indented
for a nicer output.
$ dotnet run [ { "Name": "John Doe", "Occupation": "gardener" }, { "Name": "Roger Roe", "Occupation": "driver" }, { "Name": "Lucia Novak", "Occupation": "teacher" } ]
Json.NET read JSON data from web
Next we use HttpClient
to create a GET request and process the
JSON output.
using Newtonsoft.Json; using var client = new HttpClient(); var url = "http://webcode.me/users.json"; var res = await client.GetAsync(url); var json = await res.Content.ReadAsStringAsync(); Users? data = JsonConvert.DeserializeObject<Users>(json); if (data != null) { foreach (var user in data.users) { Console.WriteLine(user); } } class Users { public List<User> users { get; set; } = new(); } class User { [JsonPropertyAttribute("id")] public int Id { get; set; } [JsonPropertyAttribute("first_name")] public string FirstName { get; set; } = string.Empty; [JsonPropertyAttribute("last_name")] public string LastName { get; set; } = string.Empty; [JsonPropertyAttribute("email")] public string Email { get; set; } = string.Empty; public override string ToString() { return $"User {{ {Id}| {FirstName} {LastName}| {Email} }}"; } }
We read a JSON string from a web resource and turn it into a list of objects.
var res = await client.GetAsync(url);
We create a GET request to the specified resource.
var json = await res.Content.ReadAsStringAsync();
From the response content, we get the JSON string.
Users? data = JsonConvert.DeserializeObject<Users>(json);
We deserialize the JSON string into a list of users.
[JsonPropertyAttribute("first_name")] public string FirstName { get; set; } = string.Empty;
The JsonPropertyAttribute
instructs the JsonSerializer to always
serialize the member with the specified name.
$ dotnet run User { 1| Robert Schwartz| rob23@gmail.com } User { 2| Lucy Ballmer| lucyb56@gmail.com } User { 3| Anna Smith| annasmith23@gmail.com } User { 4| Robert Brown| bobbrown432@yahoo.com } User { 5| Roger Bacon| rogerbacon12@yahoo.com }
Source
In this article we have worked with JSON data in C# using Newtonsoft
Json.NET
.
Author
List all C# tutorials.