.NET 4.x Как десериализовать такой JSON - C#
Формулировка задачи:
Уважаемые.
Имеется вот такой JSON:
Ключи могут меняться, добавляться или удаляться.
Вот ссылка на этот JSON https://api.exmo.com/v1/ticker/
Помогите сделать универсальное решение.
Необходимо сделать следующее:
1 - десериализовать в List.
2 - объединить, т.е. удалить основные ключи, как если бы JSON выглядел так:
3 - сюда-же добавить еще одно поле
{ "BTC_EUR" : { "avg" : "372.93547004",
"buy_price" : "372",
"high" : "375.41",
"last_trade" : "372",
"low" : "371.18",
"sell_price" : "374.9",
"updated" : 1459021665,
"vol" : "66.21721654",
"vol_curr" : "24680.68848195"
},
"BTC_USD" : { "avg" : "416.6776047",
"buy_price" : "414.5",
"high" : "421.8999",
"last_trade" : "415.73",
"low" : "413.333",
"sell_price" : "416",
"updated" : 1459021687,
"vol" : "203.60824276",
"vol_curr" : "84825.19698352"
}
}{ "avg" : "416.6776047",
"buy_price" : "414.5",
"high" : "421.8999",
"last_trade" : "415.73",
"low" : "413.333",
"sell_price" : "416",
"updated" : 1459021687,
"vol" : "203.60824276",
"vol_curr" : "84825.19698352"
}pair
с именем "BTC_USD" Я пытался сделать на классах, но проблема в том что основные ключи меняются постоянно, у меня ничего не получилось. А динамическую систему десериализации сделать не получилось, не осилил. Только учусь, многого не знаю.Решение задачи: «.NET 4.x Как десериализовать такой JSON»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Net;
using System.Text;
using System.Runtime.Serialization.Json;
using System.IO;
namespace ConsoleCS
{
class Program
{
static void Main(string[] args)
{
string url = "https://api.exmo.com/v1/ticker/";
var wc = new WebClient();
var settings = new DataContractJsonSerializerSettings();
settings.UseSimpleDictionaryFormat = true;
var serializer = new DataContractJsonSerializer(typeof(Dictionary<string, Dictionary<string, object>>), settings);
var json = wc.DownloadString(url);
Dictionary<string, Dictionary<string, object>> dict;
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
{
dict = serializer.ReadObject(ms) as Dictionary<string, Dictionary<string, object>>;
}
foreach (string key in dict.Keys)
Console.WriteLine("{0}: {1}",key,dict[key]["buy_price"]);
Console.ReadLine();
}
}
}