Есть ответ с сервера в виде json: { "14.05.2018": { "Min": "2", "Max": "7" }, "15.05.2018": { "Min": "1", "Max": "7" } } Нужно распарсить в C# по уму. Я так понимаю это двумерный ассоциативный массив. Подскажите как быть. Сам новичок в этом деле и ранее с json не работал.
Ответ Подготовка Давайте разберемся, что из себя вообще представляет ваш JSON. Я лично для подобных целей использую данный ресурс. Вставляем туда наши данные и видим следующую картину:
Что тут у нас? У нас есть первый уровень (назовем его Root). Root содержит в себе некие объекты, которые имеют название и что то внутри, (внутренние объекты назовем к примеру Data) . Внутри Data мы видим два значения (min и max).
Хорошо, со структурой разобрались, дальше нам понадобится то, что облегчит нам жизнь при работе с JSON форматом, я лично рекомендую использовать Newtonsoft.Json, отличная библиотека для работы с JSON! Десериализация Разобравшись со структурой и установив необходимое, можно приступать к десериализации (преобразования JSON в объект). Пойдем с самого конца, а именно создадим для начала Data. Мы помним, что Data имеет в себе 2 значения min и max, оба содержат число (то есть int). Имея все это, мы можем написать следующий класс: public class Data { public int Min { get set } public int Max { get set } }
Заметьте, все переменные здесь написаны по правилам CamelCase, то есть с большой буквы. Советую и вам придерживаться этого стиля при написании подобных классов, но нужно помнить: поменять регистр в названии можно без проблем, но если имя в классе будет отличаться от того, что в JSON — мы не получим данные и по этому подобные переименования стоит помечать атрибутом [JsonProperty("oldName")] с указанием имени, который есть в JSON. Так, имея класс Data, мы можем пойти уровнем выше, создать объект с именем и Data внутри. Для этого в C# принято использовать Dictionary (словарь), где Key — это будет имя (в вашем случае дата), а Value — данные (в вашем случае — класс Data). Исходя из этого мы можем написать следующее: var source = "{\"14.05.2018\":{\"min\":\"2\",\"max\":\"7\"},\"15.05.2018\":{\"min\":\"1\",\"max\":\"7\"}}" var parsed = JsonConvert.DeserializeObject>(source)
Поясню, мы вызываем метод DeserializeObject, которому задаем тип данных Dictionary, ну и передаем source — наш JSON в виде string. Собственно и все, результатом мы получим объект Dictionary из которого можно получить то, что нам нужно, к примеру так: parsed["14.05.2018"].Max Или пройтись циклом: foreach (var data in parsed) { Console.WriteLine($"Key: {data.Key}") Console.WriteLine($"Max: {data.Value.Max} Min: {data.Value.Min}") } Сам же объект parsed будем иметь примерно следующую структуру:
Кстати! Для работы с JSON очень круто помогают ресурсы, которые сами за вас составляют нужную структуру классов, к примеру этот. Вставив ваш JSON в левое поле и указав в поле Name желаемое имя класса (Data), сайт составит нам следующую структуру: public partial class Data { [JsonProperty("min")] public string Min { get set } [JsonProperty("max")] public string Max { get set } } public partial class Data { public static Dictionary FromJson(string json) => JsonConvert.DeserializeObject>(json, QuickType.Converter.Settings) } Не напоминает ничего? В общем пользуйтесь, вещь очень полезная! Надеюсь помог. Удачи в изучении C#!