Часть JSON, возвращаемая API, сериализуется JSON.NET, но не все - PullRequest
0 голосов
/ 01 октября 2018

Я полагаю, что это скорее проблема с моим кодом, чем проблема с JSON.NET, но я не уверен, где я ошибаюсь.

У меня есть следующий класс ниже, которыйиспользуется для сериализации данных json, найденных по этой ссылке: https://samples.openweathermap.org/data/2.5/weather?q=London,uk&appid=b6907d289e10d714a6e88b30761fae22

Для создания этого класса я использовал генератор JSON для C #, найденный в Google.

Также ниже приведены методы, которые я использую длявытащить и сериализовать данные 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 можно использовать позже в приложении для отображения информации в графическом интерфейсе.Однако часть MainData данных JSON устанавливается в нуль после того, как JSON извлечен из API.

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; }
}

Пример JSON сверху API

{
  "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 голосов
/ 01 октября 2018

Свойство JSON называется main, а не mainData.JSON.Net не может найти свойство с именем mainData ans и, следовательно, не заполняет свойство MainData ваших POCOs

...