API返回的部分JSON已由JSON.NET序列化,但并非全部

时间:2018-10-01 08:35:55

标签: c# json.net restsharp

我想这更多是我的代码问题,而不是JSON.NET问题,但我不确定我要去哪里。

我下面有下面的类,该类用于序列化在此链接中找到的json数据:https://samples.openweathermap.org/data/2.5/weather?q=London,uk&appid=b6907d289e10d714a6e88b30761fae22

要构建此类,我使用了JSON到Google上的C#生成器。

下面也是我用来将JSON数据提取并序列化为WeatherData对象的方法。

private string GetJsonFromWeb(string resource, string city)
{
    var request = new RestRequest(resource, Method.GET);
    request.AddParameter("q", city);
    request.AddParameter("APPID", "af5e6fd579e0ddb303afc1774487c77b");

    var fullUrl = client.BuildUri(request);
    Console.WriteLine("Full URL: " + fullUrl.AbsoluteUri);

    var response = client.Execute(request);
    string json = response.Content;
    return json;
}

private WeatherData SerializeJsonToWeatherData(string json)
{
    WeatherData weatherData = JsonConvert.DeserializeObject<WeatherData>(json);
    return weatherData;
}

这些方法成功运行,因为可以稍后在应用程序中使用JSON数据在GUI中显示信息。但是,从API提取JSON后,JSON数据的MainData部分将设置为null。

class WeatherData
{
    public Coord Coord { get; set; }
    public List<Weather> Weather { get; set; }
    public string Base { get; set; }
    public MainData MainData { get; set; }
    public int Visibility { get; set; }
    public Wind Wind { get; set; }
    public Clouds Clouds { get; set; }
    public int Dt { get; set; }
    public Sys Sys { get; set; }
    public int Id { get; set; }
    public string Name { get; set; }
    public int Cod { get; set; }
}

public class Coord
{
    public double Lon { get; set; }
    public double Lat { get; set; }
}

public class Weather
{
    public int Id { get; set; }
    public string Main { get; set; }
    public string Description { get; set; }
    public string Icon { get; set; }
}

public class MainData
{
    public double Temp { get; set; }
    public int Pressure { get; set; }
    public int Humidity { get; set; }
    public double Temp_min { get; set; }
    public double Temp_max { get; set; }
}

public class Wind
{
    public double Speed { get; set; }
    public int Deg { get; set; }
}

public class Clouds
{
    public int All { get; set; }
}

public class Sys
{
    public int Type { get; set; }
    public int Id { get; set; }
    public double Message { get; set; }
    public string Country { get; set; }
    public int Sunrise { get; set; }
    public int Sunset { get; set; }
}

从上述API采样JSON

{
  "coord": {
    "lon": -0.13,
    "lat": 51.51
  },
  "weather": [
    {
      "id": 300,
      "main": "Drizzle",
      "description": "light intensity drizzle",
      "icon": "09d"
    }
  ],
  "base": "stations",
  "main": {
    "temp": 280.32,
    "pressure": 1012,
    "humidity": 81,
    "temp_min": 279.15,
    "temp_max": 281.15
  },
  "visibility": 10000,
  "wind": {
    "speed": 4.1,
    "deg": 80
  },
  "clouds": {
    "all": 90
  },
  "dt": 1485789600,
  "sys": {
    "type": 1,
    "id": 5091,
    "message": 0.0103,
    "country": "GB",
    "sunrise": 1485762037,
    "sunset": 1485794875
  },
  "id": 2643743,
  "name": "London",
  "cod": 200
}

1 个答案:

答案 0 :(得分:0)

JSON属性称为main而不是mainData。 JSON.Net找不到名为mainData的属性,因此不会填充POCO的MainData属性