Как проанализировать вывод Json из API Visistat с помощью Json.net

1

У меня есть строка Json из API Visistat.com, которую я пытаюсь разобрать на С# с Json.Net. Строка Json выглядит так:

[
    ["date", "uniques"],
    ["2014-04-15", "613"],
    ["2014-04-16", "631"],
    ["2014-04-17", "593"],
    ["2014-04-18", "466"],
    ["2014-04-19", "305"],
    ["2014-04-20", "294"],
    ["2014-04-21", "795"],
    ["2014-04-22", "666"],
    ["2014-04-23", "625"],
    ["2014-04-24", "571"],
    ["2014-04-25", "506"],
    ["2014-04-26", "342"],
    ["2014-04-27", "351"],
    ["2014-04-28", "720"],
    ["2014-04-29", "606"],
    ["2014-04-30", "588"],
    ["2014-05-01", "508"],
    ["2014-05-02", "545"],
    ["2014-05-03", "345"],
    ["2014-05-04", "379"],
    ["2014-05-05", "833"],
    ["2014-05-06", "635"],
    ["2014-05-07", "596"],
    ["2014-05-08", "530"],
    ["2014-05-09", "539"],
    ["2014-05-10", "322"],
    ["2014-05-11", "290"],
    ["2014-05-12", "734"],
    ["2014-05-13", "684"],
    ["2014-05-14", "555"],
    ["2014-05-15", "511"]
]

Я создал объект для десериализации этого в:

public class DateUnique
{
    public DateTime date { get; set; }
    public int uniques { get; set; }
}

Затем я пытаюсь проанализировать строку Json:

List<DateUnique> dateuniques = JsonConvert.DeserializeObject<List<DateUnique>>(json);

Затем я получаю это исключение:

Невозможно десериализовать текущий массив JSON (например, [1,2,3]) в тип "VisiStatSystem.DateUnique", потому что для десериализации корректно требуется тип JSON (например, {"name": "value"}). Чтобы исправить эту ошибку, измените JSON на объект JSON (например, {"name": "value"}) или измените десериализованный тип на массив или тип, реализующий интерфейс коллекции (например, ICollection, IList), например List, который может десериализоваться из массива JSON. JsonArrayAttribute также может быть добавлен к типу, чтобы заставить его десериализоваться из массива JSON. Путь '[0]', строка 1, позиция 2.

Я не вижу никаких образцов в документации Json.net, которая показывает, как десериализовать строку Json, которая похожа на то, что возвращается VisiStat Api. Любая помощь ценится!

Теги:
json.net

1 ответ

1

Вы получаете эту ошибку, потому что ваш JSON - это массив массивов, а не массив объектов, в то время как вы пытаетесь разобрать его так, как если бы он был последним. Для десериализации его в List<DateUnique> вам понадобится немного специальной обработки.

Следующий код должен работать:

JArray array = JArray.Parse(json);
List<DateUnique> list = new List<DateUnique>(array.Count - 1);
for (int i = 1; i < array.Count; i++)
{
    list.Add(new DateUnique
    {
        date = DateTime.ParseExact(array[i][0].ToString(), 
            "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture),
        uniques = int.Parse(array[i][1].ToString())
    });
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню