Most API payloads are in XML or JSON; it is best to know both of these data structures, and how to serialize/deserialize them
In general, to use Newtonsoft.Json you simply need to create a .NET class hierarchy that mimics the structure and hierarchy of the target JSON. Once that is setup, serializing in-memory objects to JSON and deserializing the JSON back to in-memory objects is a breeze.
You achieve this by normal class hierarchy and making List<> of child objects, array properties, etc. Newtonsoft's 'JsonProperty' class property decorator maps JSON properties and the builtin serialization and deserialization methods facilitate working between JSON strings and the in-memory objects they represent.
The C# source code below demonstrates serialization from a SQL Server 2017 SSRS API v2 JSON response and then serializing that object back into JSON.
Source Code:
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Newtonsoft.Json;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
namespace DemoTests
{
[TestClass]
public class DemoTestJSON
{
[TestMethod]
public async Task TestDeserializeJSON()
{
HttpClient client = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true });
client.BaseAddress = new Uri("http://localhost/reports/api/v2.0/reports");
var response = await client.GetAsync(client.BaseAddress);
var deserial = JsonConvert.DeserializeObject<APIGenericItemsResponse>(await response.Content.ReadAsStringAsync());
TestSerializeJSON(deserial);
Assert.IsNotNull(deserial);
}
[TestMethod]
public void TestSerializeJSON(APIGenericItemsResponse genericObject)
{
string serial = JsonConvert.SerializeObject(genericObject);
Assert.IsNotNull(null);
}
}
public class APIGenericItemsResponse
{
[JsonProperty("@odata.context")]
public string Context { get; set; }
[JsonProperty("value")]
public List<GenericItem> GenericItem { get; set; }
}
public class GenericItem
{
[JsonProperty("Id")]
public string Id { get; set; }
[JsonProperty("Name")]
public string Name { get; set; }
[JsonProperty("Path")]
public string Path { get; set; }
}
}
SSRS API v2 /Reports JSON Response:
JSON Deserialization with Newtonsoft.Json:
The deserial variable holds an in-memory .NET object of type APIGenericResponse, derived (deserialized) from the SSRS API JSON response
JSON Serialization with Newtonsoft.Json:
The serial variable is simply the serialization APIGenericItemsResponse object serialized into a JSON string
Reference: https://www.newtonsoft.com/json/help/html/Introduction.htm