CSharp · Console
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();
}
}