解析 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' to
string'. 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;
我有一个包含一些数据的 JSON 字符串。
我确实没有声明匹配的类型并且正在使用动态,因为有很多很多情况下API调用和JSON返回具有完全不同结构的。
我想做的是在 days
的第一个元素中循环遍历 entries
的数组 - 并获取日期时间与当前日期时间非常匹配的条目。
我遇到的错误是:
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: Cannot implicitly convert type
Newtonsoft.Json.Linq.JArray' to
string'. 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;