Прощу подсказать по возможности, как распарсить строку вида:
{"server_time":1520605826,"pairs":{"ltc_btc":{"decimal_places":8,"min_price":0.00000001,"max_price":10000,"min_amount":0.0001,"min_total":0.0001,"hidden":0,"fee":0.2,"fee_buyer":0.2,"fee_seller":0.2},"nmc_btc":{"decimal_places":8,"min_price":0.00000001,"max_price":10000,"min_amount":0.0001,"min_total":0.0001,"hidden":0,"fee":0.2,"fee_buyer":0.2,"fee_seller":0.2},"ppc_btc":{"decimal_places":8,"min_price":0.00000001,"max_price":10000,"min_amount":0.0001,"min_total":0.0001,"hidden":0,"fee":0.2,"fee_buyer":0.2,"fee_seller":0.2},"dash_btc":{"decimal_places":8,"min_price":0.00000001,"max_price":10000,"min_amount":0.0001,"min_total":0.0001,"hidden":0,"fee":0.2,"fee_buyer":0.2,"fee_seller":0.2},"doge_btc":{"decimal_places":8,"min_price":0.00000001,"max_price":10000,"min_amount":0.0001,"min_total":0.0001,"hidden":0,"fee":0.2,"fee_buyer":0.2,"fee_seller":0.2},"cam_btc":{"decimal_places":8,"min_price":0.00000001,"max_price":10000,"min_amount":0.0001,"min_total":0.0001,"hidden":0,"fee":0.2,"fee_buyer":0.2,"fee_seller":0.2},"cann_btc":{"decimal_places":8,"min_price":0.00000001,"max_price":10000,"min_amount":0.0001,"min_total":0.0001,"hidden":0,"fee":0.2,"fee_buyer":0.2,"fee_seller":0.2},"uro_btc":{"decimal_places":8,"min_price":0.00000001,"max_price":10000,"min_amount":0.0001,"min_total":0.0001,"hidden":0,"fee":0.2,"fee_buyer":0.2,"fee_seller":0.2},"opal_btc":{"decimal_places":8,"min_price":0.00000001,"max_price":10000,"min_amount":0.0001,"min_total":0.0001,"hidden":0,"fee":0.2,"fee_buyer":0.2,"fee_seller":0.2},"via_btc":{"decimal_places":8,"min_price":0.00000001,"max_price":10000,"min_amount":0.0001,"min_total":0.0001,"hidden":0,"fee":0.2,"fee_buyer":0.2,"fee_seller":0.2},"sdc_btc":{"decimal_places":8,"min_price":0.00000001,"max_price":10000,"min_amount":0.0001,"min_total":0.0001,"hidden":0,"fee":0.2,"fee_buyer":0.2,"fee_seller":0.2},"start_btc":{"decimal_places":8,"min_price":0.00000001,"max_price":10000,"min_amount":0.0001,"min_total":0.0001,"hidden":0,"fee":0.2,"fee_buyer":0.2,"fee_seller":0.2},"gsx_btc":{"decimal_places":8,"min_price":0.00000001,"max_price":10000,"min_amount":0.0001,"min_total":0.0001,"hidden":0,"fee":0.2,"fee_buyer":0.2,"fee_seller":0.2},"vtc_btc":{"decimal_places":8,"min_price":0.00000001,"max_price":10000,"min_amount":0.0001,"min_total":0.0001,"hidden":0,"fee":0.2,"fee_buyer":0.2,"fee_seller":0.2},"smbr_btc":{"decimal_places":8,"min_price":0.00000001,"max_price":10000,"min_amount":0.0001,"min_total":0.0001,"hidden":0,"fee":0.2,"fee_buyer":0.2,"fee_seller":0.2},"etco_btc":
...//
{"decimal_places":8,"min_price":0.00000001,"max_price":10000,"min_amount":0.0001,"min_total":0.0001,"hidden":0,"fee":0.2,"fee_buyer":0.2,"fee_seller":0.2}}}
server_time вопросов нет.
Но вот ltc_btc, nmc_btc и т.д. жутко неохота прописывать в классе, так как их повторюсь очень много. Возможно ли как то распарсить на массивы и желательно, что бы ltc_btc, nmc_btc и т.д. переписывались в string к остальным параметрам:
"decimal_places":8,"min_price":0.00000001,"max_price":10000,"min_amount":0.0001,"min_total":0.0001,"hidden":0,"fee":0.2,"fee_buyer":0.2,"fee_seller":0.2
Хоть вам и лень все это искать (а на эту тему на самом стаке ооочень много ответов), помогу вам все же...
Для начала, очень советую данный ресурс: тык. Также я буду в ответе использовать Json.net библиотеку.
Взглянем на структуру вашего JSON:
Мы видим, что в корне у нас есть некий long объект server_time и дальше идет некая коллекция pairs. В коллекции pairs мы видим неизвестное (динамичное) для нас имя некой подгруппы ltc_btc, внутри этой группы есть другие, интересующие нас объекты. Так, вроде бы разобрались, давайте создадим необходимую структуру данных и попробуем десериализовать JSON:
Создадим для начала простое, нашу категорию pairs:
public class Pair
{
[JsonProperty("decimal_places")]
public long DecimalPlaces { get; set; }
[JsonProperty("min_price")]
public double MinPrice { get; set; }
[JsonProperty("max_price")]
public long MaxPrice { get; set; }
[JsonProperty("min_amount")]
public double MinAmount { get; set; }
[JsonProperty("min_total")]
public double MinTotal { get; set; }
[JsonProperty("hidden")]
public long Hidden { get; set; }
[JsonProperty("fee")]
public double Fee { get; set; }
[JsonProperty("fee_buyer")]
public double FeeBuyer { get; set; }
[JsonProperty("fee_seller")]
public double FeeSeller { get; set; }
}
Здесь все просто, название класса Pair - ибо наша коллекция будет Pairs (множественное), один объект Pair. Далее каждое значение приведено к своему типу (long, double и др.), задавайте сразу верное значение!. Также можно заметить, что у каждого значения есть некий флаг JsonProperty, который указывает оригинальное имя объекта! Ведь не правильно в C# языке назвать переменную fee_seller, да и не красиво это. Ок, часть работы сделана.
Следующим шагом будет создание еще одного класса, который будет содержать в себе server_time и нашу коллекцию pairs, раз это корневой класс, давайте так и назовем его:
public class RootObject
{
[JsonProperty("server_time")]
public long ServerTime { get; set; }
[JsonProperty("pairs")]
public Dictionary<string, Pair> Pairs { get; set; }
}
Здесь вроде все понятно, имена (как и в классе Pair), пометки и все остальное. Интересное тут заключается в коллекции Pairs, как можно видеть, это словарь (Dictionary). При десериализации, под каждый ltc_btc, nmc_btc, opal_btc... мы получим своварь, который в ключе (key) будет хранить название нужного раздела (opal_btc к примеру), а в значение (value) будут "внутренности", в виде класса Pair.
Ну чтож, раз структура у нас есть, осталось сделать десериализацию:
var json = JsonConvert.DeserializeObject<RootObject>(jstring);
Ну тут прям совсем просто, мы в JSON (которой будет задан тип RootObject) десериализуем данные из полученной заранее string jstring переменной.
Все, теперь можно вывести необходимые данные:
Мы можем к примеру сделать поиск по ключу:
var data = json.Pairs.FirstOrDefault(x => x.Key == "ltc_btc");
Console.WriteLine($"Key: {data.Key} {data.Value.MaxPrice}");
А можем вывести все объекты сразу с помощью цикла:
foreach (var pair in json.Pairs)
{
Console.WriteLine($"{pair.Key}, {pair.Value.MaxPrice}");
}
Ну, надеюсь я вам помог. В дальнейшем, прошу вас не лениться и хотя бы немного попробуйте поискать информацию! Удачи!
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости