https://stackoverflow.com/questions/63707238

CSharp · Console

/Program.cs

using System;
using System.Collections.Generic;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
					
public class Program
{
	public static void Main()
	{
        string json = @"
            {
              ""bankDetails"": [
                {
                  ""ABC Bank"": [
                    {
                      ""sNo"": 1,
                      ""acNo"": ""1235465"",
                      ""acBalance"": ""100.25""
                    },
                    {
                      ""sNo"": 2,
                      ""acNo"": ""1235467"",
                      ""acBalance"": ""50.25""
                    }
                  ],
                  ""bankName"": ""ABC Bank"",
                  ""totalAmount"": ""150.50""
                },
                {
                  ""XYZ Bank"": [
                    {
                      ""sNo"": 1,
                      ""acNo"": ""1248565"",
                      ""acBalance"": ""75.25""
                    }
                  ],
                  ""bankName"": ""XYZ Bank"",
                  ""totalAmount"": ""75.25""
                },
                {
                  ""BCD Bank"": [
                    {
                      ""sNo"": 1,
                      ""acNo"": ""145665"",
                      ""acBalance"": ""10.25""
                    },
                    {
                      ""sNo"": 2,
                      ""acNo"": ""195267"",
                      ""acBalance"": ""5.25""
                    }
                  ],
                  ""bankName"": ""BCD Bank"",
                  ""totalAmount"": ""15.50""
                }
              ]
            }";

		var root = JsonConvert.DeserializeObject<RootObject>(json);
		foreach (var bank in root.BankDetails)
		{
			Console.WriteLine(bank.BankName);
			foreach (var account in bank.Accounts)
			{
				Console.WriteLine("Account " + account.AccountNumber + ": " + account.Balance);
			}
			Console.WriteLine("Total: " + bank.TotalAmount);
			Console.WriteLine(new string('-', 25));
		}
	}
}

class RootObject
{
    public List<Bank> BankDetails { get; set; }
}

[JsonConverter(typeof(BankConverter))]
class Bank
{
    public string BankName { get; set; }
    public decimal TotalAmount { get; set; }
    public List<Account> Accounts { get; set; }
}

class Account
{
    [JsonProperty("sNo")]
    public int SequenceNumber { get; set; }
    [JsonProperty("acNo")]
    public string AccountNumber { get; set; }
    [JsonProperty("acBalance")]
    public decimal Balance { get; set; }
}

class BankConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(Bank);
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        JObject obj = JObject.Load(reader);
        Bank bank = new Bank();
        // populate bankName and totalAmount
        serializer.Populate(obj.CreateReader(), bank);
        // handle the dynamic key
        bank.Accounts = obj[bank.BankName].ToObject<List<Account>>(serializer);
        return bank;
    }

    public override bool CanWrite
    {
        get { return false; }
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }
}
;