Разобрать JSON и найти элемент с ближайшей совпадающей датой

У меня есть строка JSON, содержащая некоторые данные.

У меня нет типов, объявленных для соответствия, и я использую динамику, так как существует много, много случаев, когда выполняются вызовы API и возвращаются JSON с совершенно разными структурами.

То, что я пытаюсь сделать, это перебрать массив entries в первом элементе days и получить запись, в которой dateTime точно соответствует текущей дате и времени.

У меня ошибка:

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: невозможно неявно преобразовать тип Newtonsoft.Json.Linq.JArray' tostring. Существует явное преобразование (вам не хватает приведения?)

Я считаю, что есть некоторая дополнительная сложность, связанная с необходимостью использования динамики и навигации по достаточно сложной структуре данных.

Вот что я пробовал.

dynamic windData = JsonConvert.DeserializeObject(resultWindAPI); //resultWindAPI is the JSON presented below. 

string windEntries = windData.forecasts.wind.days[0].entries;
dynamic windEntryData = JsonConvert.DeserializeObject(windEntries);

//find closest wind time to get most recent data
int min = int.MaxValue;
DateTime now = new DateTime();
dynamic currentWindEntry = windEntryData[0];

foreach(dynamic entry in windEntryData)
{
    DateTime thisDateTime = entry.dateTime;

    if (Math.Abs(thisDateTime.Ticks - now.Ticks) < min)
    {
        min = (int)thisDateTime.Ticks - (int)now.Ticks;
        currentWindEntry = entry;
    }
}

//Do something with the currentWindEntry 

Вот пример JSON, который я пытаюсь разобрать.


person Bejasc    schedule 22.09.2017    source источник
comment
Я также пробовал dynamic[] windEntryData = windEntries с аналогичной ошибкой.   -  person Bejasc    schedule 22.09.2017
comment
это string windEntries = windData.forecasts.wind.days[0].entries; твоя проблема. сделай и это dynamic   -  person Nkosi    schedule 22.09.2017
comment
Если бы вы опубликовали это как ответ, я мог бы представить вас! Спасибо за это, теперь перейдем к устранению неполадок, почему не работает сравнение дат.   -  person Bejasc    schedule 22.09.2017


Ответы (1)


Судя по сообщению об ошибке

string windEntries = windData.forecasts.wind.days[0].entries;

это проблема.

У вас уже есть доступ к записям через динамическую переменную, поэтому просто назначьте ее.

dynamic windEntryData = windData.forecasts.wind.days[0].entries;
person Nkosi    schedule 22.09.2017