Помощь в парсинге json на C#
Имею такой json
`{
"Date": "2020-04-09T11:30:00+03:00",
"PreviousDate": "2020-04-08T11:30:00+03:00",
"PreviousURL": "\/\/www.cbr-xml-daily.ru\/archive\/2020\/04\/08\/daily_json.js",
"Timestamp": "2020-04-08T23:00:00+03:00",
"Valute": {
"AUD": {
"ID": "R01010",
"NumCode": "036",
"CharCode": "AUD",
"Nominal": 1,
"Name": "Австралийский доллар",
"Value": 46.4801,
"Previous": 46.6312
},
"AZN": {
"ID": "R01020A",
"NumCode": "944",
"CharCode": "AZN",
"Nominal": 1,
"Name": "Азербайджанский манат",
"Value": 44.6507,
"Previous": 44.4769
},
"GBP": {
"ID": "R01035",
"NumCode": "826",
"CharCode": "GBP",
"Nominal": 1,
"Name": "Фунт стерлингов Соединенного королевства",
"Value": 93.233,
"Previous": 93.0662
},
"AMD": {
"ID": "R01060",
"NumCode": "051",
"CharCode": "AMD",
"Nominal": 100,
"Name": "Армянских драмов",
"Value": 15.1697,
"Previous": 15.0534
},
"BYN": {
"ID": "R01090B",
"NumCode": "933",
"CharCode": "BYN",
"Nominal": 1,
"Name": "Белорусский рубль",
"Value": 29.6989,
"Previous": 29.5612
},
"BGN": {
"ID": "R01100",
"NumCode": "975",
"CharCode": "BGN",
"Nominal": 1,
"Name": "Болгарский лев",
"Value": 42.0436,
"Previous": 41.9311
},
"BRL": {
"ID": "R01115",
"NumCode": "986",
"CharCode": "BRL",
"Nominal": 1,
"Name": "Бразильский реал",
"Value": 14.5031,
"Previous": 14.274
},
"HUF": {
"ID": "R01135",
"NumCode": "348",
"CharCode": "HUF",
"Nominal": 100,
"Name": "Венгерских форинтов",
"Value": 22.9201,
"Previous": 22.7589
},
"HKD": {
"ID": "R01200",
"NumCode": "344",
"CharCode": "HKD",
"Nominal": 10,
"Name": "Гонконгских долларов",
"Value": 97.7153,
"Previous": 97.3224
},
"DKK": {
"ID": "R01215",
"NumCode": "208",
"CharCode": "DKK",
"Nominal": 1,
"Name": "Датская крона",
"Value": 11.0167,
"Previous": 10.9849
},
"USD": {
"ID": "R01235",
"NumCode": "840",
"CharCode": "USD",
"Nominal": 1,
"Name": "Доллар США",
"Value": 75.7499,
"Previous": 75.455
},
"EUR": {
"ID": "R01239",
"NumCode": "978",
"CharCode": "EUR",
"Nominal": 1,
"Name": "Евро",
"Value": 82.2341,
"Previous": 82.012
},
"INR": {
"ID": "R01270",
"NumCode": "356",
"CharCode": "INR",
"Nominal": 100,
"Name": "Индийских рупий",
"Value": 99.175,
"Previous": 99.7673
},
"KZT": {
"ID": "R01335",
"NumCode": "398",
"CharCode": "KZT",
"Nominal": 100,
"Name": "Казахстанских тенге",
"Value": 17.3788,
"Previous": 17.2656
},
"CAD": {
"ID": "R01350",
"NumCode": "124",
"CharCode": "CAD",
"Nominal": 1,
"Name": "Канадский доллар",
"Value": 53.9068,
"Previous": 53.8004
},
"KGS": {
"ID": "R01370",
"NumCode": "417",
"CharCode": "KGS",
"Nominal": 100,
"Name": "Киргизских сомов",
"Value": 89.2242,
"Previous": 88.877
},
"CNY": {
"ID": "R01375",
"NumCode": "156",
"CharCode": "CNY",
"Nominal": 1,
"Name": "Китайский юань",
"Value": 10.7178,
"Previous": 10.696
},
"MDL": {
"ID": "R01500",
"NumCode": "498",
"CharCode": "MDL",
"Nominal": 10,
"Name": "Молдавских леев",
"Value": 41.1684,
"Previous": 40.6218
},
"NOK": {
"ID": "R01535",
"NumCode": "578",
"CharCode": "NOK",
"Nominal": 10,
"Name": "Норвежских крон",
"Value": 73.3847,
"Previous": 73.5924
},
"PLN": {
"ID": "R01565",
"NumCode": "985",
"CharCode": "PLN",
"Nominal": 1,
"Name": "Польский злотый",
"Value": 18.1194,
"Previous": 18.0757
},
"RON": {
"ID": "R01585F",
"NumCode": "946",
"CharCode": "RON",
"Nominal": 1,
"Name": "Румынский лей",
"Value": 17.011,
"Previous": 16.9787
},
"XDR": {
"ID": "R01589",
"NumCode": "960",
"CharCode": "XDR",
"Nominal": 1,
"Name": "СДР (специальные права заимствования)",
"Value": 103.1638,
"Previous": 102.4845
},
"SGD": {
"ID": "R01625",
"NumCode": "702",
"CharCode": "SGD",
"Nominal": 1,
"Name": "Сингапурский доллар",
"Value": 53.0276,
"Previous": 52.9212
},
"TJS": {
"ID": "R01670",
"NumCode": "972",
"CharCode": "TJS",
"Nominal": 10,
"Name": "Таджикских сомони",
"Value": 74.0468,
"Previous": 73.903
},
"TRY": {
"ID": "R01700J",
"NumCode": "949",
"CharCode": "TRY",
"Nominal": 1,
"Name": "Турецкая лира",
"Value": 11.1564,
"Previous": 11.2234
},
"TMT": {
"ID": "R01710A",
"NumCode": "934",
"CharCode": "TMT",
"Nominal": 1,
"Name": "Новый туркменский манат",
"Value": 21.6738,
"Previous": 21.5894
},
"UZS": {
"ID": "R01717",
"NumCode": "860",
"CharCode": "UZS",
"Nominal": 10000,
"Name": "Узбекских сумов",
"Value": 78.0846,
"Previous": 78.0865
},
"UAH": {
"ID": "R01720",
"NumCode": "980",
"CharCode": "UAH",
"Nominal": 10,
"Name": "Украинских гривен",
"Value": 27.7828,
"Previous": 27.8478
},
"CZK": {
"ID": "R01760",
"NumCode": "203",
"CharCode": "CZK",
"Nominal": 10,
"Name": "Чешских крон",
"Value": 30.1889,
"Previous": 30.039
},
"SEK": {
"ID": "R01770",
"NumCode": "752",
"CharCode": "SEK",
"Nominal": 10,
"Name": "Шведских крон",
"Value": 75.1994,
"Previous": 75.4437
},
"CHF": {
"ID": "R01775",
"NumCode": "756",
"CharCode": "CHF",
"Nominal": 1,
"Name": "Швейцарский франк",
"Value": 77.916,
"Previous": 77.5408
},
"ZAR": {
"ID": "R01810",
"NumCode": "710",
"CharCode": "ZAR",
"Nominal": 10,
"Name": "Южноафриканских рэндов",
"Value": 41.1993,
"Previous": 41.194
},
"KRW": {
"ID": "R01815",
"NumCode": "410",
"CharCode": "KRW",
"Nominal": 1000,
"Name": "Вон Республики Корея",
"Value": 62.0179,
"Previous": 62.1042
},
"JPY": {
"ID": "R01820",
"NumCode": "392",
"CharCode": "JPY",
"Nominal": 100,
"Name": "Японских иен",
"Value": 69.6391,
"Previous": 69.3106
}
}
}`
Мне нужно достать свойства CharCode, Name и Value для каждой валюты. Проблема в том, что класс делать у меня не получается, т.к. как я понимаю, в этом файле для каждой валюты свой класс.
Ответы (1 шт):
Автор решения: Bulson
→ Ссылка
using Newtonsoft.Json.Linq;
class Program
{
static void Main(string[] args)
{
var json = File.ReadAllText("data.json", Encoding.GetEncoding("windows-1251"));
var objJson = JObject.Parse(json);
var currencies = objJson["Valute"].Children()
.SelectMany(v => v.Children())
.Select(c => new
{
CharCode = (string)c["CharCode"],
Name = (string)c["Name"],
Value = (decimal)c["Value"],
});
foreach (var currency in currencies)
{
Console.WriteLine($"Name:{currency.Name}, " +
$"CharCode:{currency.CharCode}, Value:{currency.Value}");
}
Console.ReadLine();
}
}