C# 进入json天气数据
我是json新手,我正在尝试解析一些天气数据。除了我想抓住的一条信息外,一切都很好C# 进入json天气数据,c#,json,parsing,C#,Json,Parsing,我是json新手,我正在尝试解析一些天气数据。除了我想抓住的一条信息外,一切都很好 var datas = new List<HourData>(); HttpResponseMessage response = await client.GetAsync(_url); if (response.IsSuccessStatusCode) { var content = await response.Content.ReadAsStringA
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的这一部分:
"weatherDesc": [
{
"value": "Overcast"
}
当我将weatherDesc添加到HourData时,我得到以下异常:
Newtonsoft.Json.JsonReaderException:读取字符串时出错。想不到的
代币:星光。路径“weatherDesc”,第1行,位置280。在
Newtonsoft.Json.JsonReader.ReadAsStringInternal()位于
Newtonsoft.Json.JsonTextReader.ReadAsString()位于
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ReadForType(JsonReader
读取器,JsonContract合同,布尔hasConverter)位于
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(对象
newObject、JsonReader、JSONObject合同、,
JsonProperty成员,字符串id)位于
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader
reader,类型objectType,JsonContract合同,JsonProperty成员,
JSONCONTAINERCONTAINERCONTAINERCONTRACT,JsonProperty containerMember,
对象存在值)位于
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader
reader,类型objectType,JsonContract合同,JsonProperty成员,
JSONCONTAINERCONTAINERCONTAINERCONTRACT,JsonProperty containerMember,
对象存在值)位于
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader
读取器,类型objectType,布尔检查附加内容)位于
Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader,
类型(objectType)位于
Newtonsoft.Json.JsonConvert.DeserializeObject(字符串值,类型,
JsonSerializerSettings(设置)位于
Newtonsoft.Json.JsonConvert.DeserializeObject[T](字符串值,
JsonSerializerSettings(设置)位于
Newtonsoft.Json.JsonConvert.DeserializeObject[T](字符串值)位于
SuburbanWebService.ddays.api.darkskyapireder.d_u6.MoveNext()
在D:\Source\techguy\Test中
Projects\DarkSkyTest\DarkSkyTest\darkskyapireder.cs:151行或一行
发生了更多的错误
除了天气预报外,一切都很好。我的想法是,它没有进入json的这一部分,至少这是我的理解。我如何进入weatherDesc并将数据拉入我的课堂
任何帮助都将不胜感激 创建一个类来保存
weatherDesc
的数据:
public class WeatherDesc
{
public string Value { get; set; }
}
然后在HourData
课程中使用它:
public class HourData
{
public IEnumerable<WeatherDesc> weatherDesc { get; set; }
...
}
公共类小时数据
{
公共IEnumerable weatherDesc{get;set;}
...
}
根据错误,它正在读取数组,因此为什么
IEnumerable
主要问题在于weatherDesc
实际上是一个数组而不是一个单数字符串。您应该能够通过将weatherDesc
字段设置为string[]
而不是string
来解决此问题。如果要将singleton(仅包含1个条目的集合)数组展平为一个字符串,则必须自己对对象进行反序列化。您可以为WeatherDesc
创建一个类,因为它是一个数组,然后在HourData
classpublic IEnumerable WeatherDesc中使用新创建的类型{get;set;}
public class HourData
{
public IEnumerable<WeatherDesc> weatherDesc { get; set; }
...
}