Я новичок в json и пытаюсь проанализировать некоторые погодные данные. Все хорошо, за исключением одной информации, которую я пытаюсь получить.
var datas = new List<HourData>();
HttpResponseMessage response = await client.GetAsync(_url);
if (response.IsSuccessStatusCode)
{
var content = await response.Content.ReadAsStringAsync();
JObject obj = JObject.Parse(content);
var token = obj.SelectToken("data.weather");
var tokenHours = (JArray)token[0].SelectToken("hourly");
foreach (var tk in tokenHours)
{
var json = JsonConvert.SerializeObject(tk);
datas.Add(JsonConvert.DeserializeObject<HourData>(json));
}
}
public class HourData
{
public string weatherDesc { get; set; }
public string time { get; set; }
public string tempF { get; set; }
public string Summary { get; set; }
public string Icon { get; set; }
public string PrecipIntensity { get; set; }
public string PrecipProbability { get; set; }
public string Temperature { get; set; }
public string ApparentTemperature { get; set; }
public string DewPoint { get; set; }
public string Humidity { get; set; }
public string Pressure { get; set; }
public string windSpeed { get; set; }
public string windGust { get; set; }
public string windBearing { get; set; }
public string cloudCover { get; set; }
public string uvIndex { get; set; }
public string visibility { get; set; }
public string windspeedMiles { get; set; }
}
Рассматриваемый JSON выглядит следующим образом:
{
"data": {
"request": [
{
"type": "LatLon",
"query": "Lat 33.41 and Lon -86.94"
}
],
"nearest_area": [
{
"areaName": [
{
"value": "Bessemer Homestead"
}
],
"country": [
{
"value": "United States of America"
}
],
"region": [
{
"value": "Alabama"
}
],
"latitude": "33.404",
"longitude": "-86.939",
"population": "0",
"weatherUrl": [
{
"value": "http://api-cdn.worldweatheronline.com/v2/weather.aspx?q=33.4063059,-86.9385553"
}
]
}
],
"weather": [
{
"date": "2019-04-20",
"astronomy": [
{
"sunrise": "06:12 AM",
"sunset": "07:22 PM",
"moonrise": "08:54 PM",
"moonset": "07:15 AM",
"moon_phase": "Waxing Gibbous",
"moon_illumination": "88"
}
],
"maxtempC": "16",
"maxtempF": "61",
"mintempC": "7",
"mintempF": "45",
"totalSnow_cm": "0.0",
"sunHour": "9.1",
"uvIndex": "3",
"hourly": [
{
"time": "0",
"tempC": "7",
"tempF": "44",
"windspeedMiles": "11",
"windspeedKmph": "17",
"winddirDegree": "278",
"winddir16Point": "W",
"weatherCode": "122",
"weatherIconUrl": [
{
"value": "http://cdn.worldweatheronline.net/images/wsymbols01_png_64/wsymbol_0004_black_low_cloud.png"
}
],
"weatherDesc": [
{
"value": "Overcast"
}
],
"precipMM": "0.1",
"humidity": "84",
"visibility": "5",
"pressure": "1009",
"cloudcover": "100",
"HeatIndexC": "7",
"HeatIndexF": "44",
"DewPointC": "4",
"DewPointF": "40",
"WindChillC": "4",
"WindChillF": "39",
"WindGustMiles": "15",
"WindGustKmph": "24",
"FeelsLikeC": "4",
"FeelsLikeF": "39",
"uvIndex": "0"
Я пытаюсь добраться до этой части JSON:
"weatherDesc": [
{
"value": "Overcast"
}
Когда я добавляю weatherDesc в HourData, я получаю следующее исключение:
Newtonsoft.Json.JsonReaderException: Ошибка чтения строки. непредвиденный
токен: StartArray. Путь 'weatherDesc', строка 1, позиция 280. at
Newtonsoft.Json.JsonReader.ReadAsStringInternal () в
Newtonsoft.Json.JsonTextReader.ReadAsString () в
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ReadForType (JsonReader
читатель, контракт JsonContract, логический hasConverter) в
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject (Объект
newObject, считыватель JsonReader, контракт JsonObjectContract,
Член JsonProperty, идентификатор строки) в
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject (JsonReader
читатель, тип objectType, контракт JsonContract, член JsonProperty,
JsonContainerContract containerContract, JsonProperty containerMember,
Объект существующего значения) в
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal (JsonReader
читатель, тип objectType, контракт JsonContract, член JsonProperty,
JsonContainerContract containerContract, JsonProperty containerMember,
Объект существующего значения) в
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize (JsonReader
читатель, тип objectType, логическое checkAdditionalContent) в
Newtonsoft.Json.JsonSerializer.DeserializeInternal (читатель JsonReader,
Тип objectType) в
Newtonsoft.Json.JsonConvert.DeserializeObject (строковое значение, тип Type,
Настройки JsonSerializerSettings) в
Newtonsoft.Json.JsonConvert.DeserializeObject [T] (строковое значение,
Настройки JsonSerializerSettings) в
Newtonsoft.Json.JsonConvert.DeserializeObject [T] (строковое значение) в
SuburbanWebService.ddays.apis.DarkskyApiReader.d__6.MoveNext ()
в D: \ Source \ techguy \ Suburban Test
Проекты \ DarkSkyTest \ DarkSkyTest \ DarkskyApiReader.cs: строка 151 Одна или
произошло больше ошибок.
Все разбирает нормально, кроме weatherDesc. Я понимаю, что он не вступает в эту часть JSON, по крайней мере, это мое понимание. Как я могу войти в WeatherDesc и получить данные в моем классе?
Любая помощь будет принята с благодарностью!