«Невозможно десериализовать текущий массив JSON (например, [1,2,3]) в тип« », потому что для типа требуется объект JSON (например,« имя »:« значение »}) для десериализации правильно». Ошибка
Я просмотрел большинство подобных вопросов, но не нашел ответа на то, что искал, поэтому я прошу нового.
Вот мой JSON:
{
"coord": {
"lon": 105.84,
"lat": 21.59
},
"weather": [
{
"id": 500,
"main": "Rain",
"description": "light rain",
"icon": "10n"
}
],
"base": "stations",
"main": {
"temp": 20.31,
"pressure": 1010.36,
"humidity": 98,
"temp_min": 20.31,
"temp_max": 20.31,
"sea_level": 1026.71,
"grnd_level": 1010.36
},
"wind": {
"speed": 1.86,
"deg": 124.5
},
"rain": {
"3h": 0.3075
},
"clouds": {
"all": 92
},
"dt": 1482264413,
"sys": {
"message": 0.0114,
"country": "VN",
"sunrise": 1482190209,
"sunset": 1482229157
},
"id": 1566319,
"name": "Thai Nguyen",
"cod": 200
}
И вот мой код:
private void Form1_Load(object sender, EventArgs e)
{
string url = "http://api.openweathermap.org/data/2.5/weather?q=London&units=metric&appid={MyAppID}";
HttpWebRequest httpWebRequset = (HttpWebRequest)WebRequest.Create(url);
httpWebRequset.Method = WebRequestMethods.Http.Get;
httpWebRequset.ContentType = "application/json";
HttpWebResponse httpResponse = (HttpWebResponse)httpWebRequset.GetResponse();
using (var StreamReader = new StreamReader(httpResponse.GetResponseStream()))
{
string responseString = StreamReader.ReadToEnd();
ResponseData data = JsonConvert.DeserializeObject<ResponseData>(responseString);
ShowTemp.Text = data.main.temp + "°C";
ShowWheater.Text = data.weather.description;
}
}
Если когда-нибудь я стараюсь, чтобы получить температуру я могу найти его, но когда я хочу, чтобы получить описание от:
{
...
"weather": [
{
"id": 500,
"main": "Rain",
"description": "light rain",
"icon": "10n"
}
]
...
}
Я получаю сообщение об ошибке.
Показать свой 'Resp класс onseData'. – Equalsk
Как выглядит класс ResponseData? Я подозреваю, что ожидается, что объект погоды будет отформатирован как «{« id »: 500,« main »:« Rain »,« description »:« light rain »,« icon »:« 10n »}. Квадратные скобки, которые вы пытаетесь проанализировать в погодном объекте, означает, что он пытается читать в массиве объектов. –
Действительно, в вашем корневом объекте для этого класса вам, вероятно, понадобится что-то вроде 'public List weather {get; set;}' где 'Weather' - класс с такими свойствами, как' id' и 'description'. –
Equalsk