.NET 4.x Как десериализовать такой JSON - C#

Узнай цену своей работы

Формулировка задачи:

Уважаемые. Имеется вот такой JSON:
{ "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"
    }
}
Ключи могут меняться, добавляться или удаляться. Вот ссылка на этот JSON https://api.exmo.com/v1/ticker/ Помогите сделать универсальное решение. Необходимо сделать следующее: 1 - десериализовать в List. 2 - объединить, т.е. удалить основные ключи, как если бы JSON выглядел так:
{ "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"
}
3 - сюда-же добавить еще одно поле

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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4 из 5
Похожие ответы