C# 进入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

我是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的这一部分:

                    "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
class
public IEnumerable WeatherDesc中使用新创建的类型{get;set;}
public class HourData
{
    public IEnumerable<WeatherDesc> weatherDesc { get; set; }
    ...
}