Simple Json C# Correct Way to Deserialize Dictionary

We are using the RESTSharp Library to work with third-party REST-based APIs, which by default support XML and JSON deserialization. However, their documentation for Deserialization covers a limited, simple example, which was not sufficient to help us consume Complex JSON output.

We are using http://json2csharp.com/ to convert JSON string to C# class. Which works perfectly when a JSON string is in a simple structure. but when it comes to Deserialize to JSON to Dictionary< string, class> the class generated using json2csharp.com fails.

Example:

Consider following complex JSON response which requires Dictionary<string, class>.

JSON:


"response": {
	"1007": {
		"total": {
			"inStock": 10,
			"onHand": 9,
			"allocated": 1
		}
	},
	"1008": {
		"total": {
			"inStock": 0,
			"onHand": 0,
			"allocated": 0
		}
	}
}

Output after converting JSON to C# class using converter tool(https://json2csharp.com/):


public class Total
{
    public int InStock { get; set; }
    public int OnHand { get; set; }
    public int Allocated { get; set; }
}

public class StockDetails1007
{
    public Total Total { get; set; }
}

public class StockDetails1008
{
    public Total Total { get; set; }
}

public class Response
{
    public StockDetails1007 Stock1007 { get; set; }
    public StockDetails1008 Stock1008 { get; set; }
}

public class RootObject
{
    public Response Response { get; set; }
}

Wrong way to put Dictionary:


public class Response
{
    public Dictionary<string, Product> Products { get; set; }
}

public class RootObject
{
    public Response Response { get; set; }
}

The right way to put Dictionary:


public class RootObject
{
    // Corrected the Dictionary syntax by using proper < and > characters
    public Dictionary<string, Product> Response { get; set; }
}

public class Product
{
    public Total Total { get; set; }
}

public class Total
{
    public int InStock { get; set; }
    public int OnHand { get; set; }
    public int Allocated { get; set; }
}

I hope this article saves time for you.

Thank you…!!

Article by

Chintan Prajapati

Chintan Prajapati, a seasoned computer engineer with over 20 years in the software industry, is the Founder and CEO of Satva Solutions. His expertise lies in Accounting & ERP Integrations, RPA, and developing technology solutions around leading ERP and accounting software, focusing on using Responsible AI and ML in fintech solutions. Chintan holds a BE in Computer Engineering and is a Microsoft Certified Professional, Microsoft Certified Technology Specialist, Certified Azure Solution Developer, Certified Intuit Developer, and Xero Developer.Throughout his career, Chintan has significantly impacted the accounting industry by consulting and delivering integrations and automation solutions that have saved thousands of man-hours. He aims to provide readers with insightful, practical advice on leveraging technology for business efficiency.Outside of his professional work, Chintan enjoys trekking and bird-watching. Guided by the philosophy, "Deliver the highest value to clients". Chintan continues to drive innovation and excellence in digital transformation strategies from his base in Ahmedabad, India.