解析 JSON 并找到最匹配日期的元素

Parse JSON and find element with closest matching date

我有一个包含一些数据的 JSON 字符串。

我确实没有声明匹配的类型并且正在使用动态,因为有很多很多情况下API调用和JSON返回具有完全不同结构的。

我想做的是在 days 的第一个元素中循环遍历 entries 的数组 - 并获取日期时间与当前日期时间非常匹配的条目。

我遇到的错误是:

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: Cannot implicitly convert type Newtonsoft.Json.Linq.JArray' tostring'. An explicit conversion exists (are you missing a cast?)

我认为需要使用动态并在相当复杂的数据结构中导航会增加一些复杂性。

这是我试过的。

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 

Here is an example 的 JSON 我正在尝试解析。

根据报错信息

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

是问题所在。

您之前已经可以通过动态变量访问条目,所以只需分配它即可。

dynamic windEntryData = windData.forecasts.wind.days[0].entries;