Deserialize json data into list in c#

I am calling an external web service and this is what I get in response after posting to their server:

{
   "status":200,
   "data":{
      "h21":{
         "total_price":{
            "acacia":{
               "available":0,
               "price":null,
               "availability":false
            },
            "maple":{
               "available":7,
               "price":2399.0,
               "availability":true
            }
         }
      },
      "h17":{
         "total_price":{
            "mahogany":{
               "available":1,
               "price":1899.0,
               "availability":true
            },
            "oak":{
               "available":0,
               "price":null,
               "availability":false
            },
            "maple":{
               "available":6,
               "price":1649.0,
               "availability":true
            }
         }
      }
   }
}

I want this response to be converted into a list. I used jsontocsharp online converter to generate class and use code below:

var Jsonresult = JsonConvert.DeserializeObject<Sstageback.Models.Sstage.treeboRoomTypes.RootObject>(JsonReplace);

But the thing is mine is a dynamic JSON response which can change over course of time.

Note: The response which I get from the server is hotel and its room availability so while generating classes I can't generate with a single class file since the hotel id's may change also the room types and its availability also changes.

Example: h21 is one hotel id and total_price has its room type details similarly h17 is the next hotel and total_price has its room type details.

Jon Skeet
people
quotationmark

Basically, TotalPrice should be a Dictionary<string, Availability> or similar. It's not clear what list you'd have, but that's naturally a dictionary. That's then nested within a dictionary at the top level.

Sample code:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Newtonsoft.Json;

public class Response
{
    public int Status { get; set; }
    public Dictionary<string, Hotel> Data { get; set; }
}

public class Hotel
{
    [JsonProperty("total_price")]
    public Dictionary<string, Room> TotalPrice { get; set; }
}

public class Room
{
    public int Available { get; set; }
    public decimal? Price { get; set; }
    public bool Availability { get; set; }
}

class Test
{
    static void Main(string[] args)
    {
        var text = File.ReadAllText("test.json");
        var response = JsonConvert.DeserializeObject<Response>(text);
        foreach (var pair in response.Data)
        {
            Console.WriteLine($"Key: {pair.Key}");
            foreach (var nestedPair in pair.Value.TotalPrice)
            {
                var room = nestedPair.Value;
                Console.WriteLine($"  {nestedPair.Key}: {room.Available}/{room.Price}/{room.Availability}");
            }
        }
    }
}

Output:

Key: h21
  acacia: 0//False
  maple: 7/2399.0/True
Key: h17
  mahogany: 1/1899.0/True
  oak: 0//False
  maple: 6/1649.0/True

people

See more on this question at Stackoverflow