ASP.net MVC API获取请求和JSON数据

时间:2018-08-07 11:57:53

标签: c# json asp.net-mvc api

尝试使用asp.net mvc的服务调用天气API。

我有一个Weather类,看起来像这样:

public class Weather
{
    public string main { get; set; }
    public string description { get; set; }
}

我用来发出GET请求的方法如下:

    async public static Task<List<Weather>> GetWeather()
    {
        List<Weather> weatherData = new List<Weather>();

        HttpClient client = new HttpClient();
        HttpResponseMessage response = await client.GetAsync("http://api.openweathermap.org/data/2.5/weather?lat=35&lon=139&APPID=[MYKEY]");

        HttpContent content = response.Content;

        string data = await content.ReadAsStringAsync();
    }

我请求的URI返回JSON对象。

{
  "coord": {
    "lon": 139,
    "lat": 35
  },
  "weather": [
    {
      "id": 804,
      "main": "Clouds",
      "description": "overcast clouds",
      "icon": "04n"
    }
  ],
  "base": "stations",
  "main": {
    "temp": 299.26,
    "pressure": 1007,
    "humidity": 83,
    "temp_min": 296.15,
    "temp_max": 301.15
  },
  "visibility": 16093,
  "wind": {
    "speed": 5.1,
    "deg": 330,
    "gust": 7.2
  },
  "clouds": {
    "all": 90
  },
  "dt": 1533638820,
  "sys": {
    "type": 1,
    "id": 7618,
    "message": 0.0028,
    "country": "JP",
    "sunrise": 1533585473,
    "sunset": 1533634868
  },
  "id": 1851632,
  "name": "Shuzenji",
  "cod": 200
}

我想访问"weather"对象并提取属性maindescription,并在我的GetWeather中返回一个列表,其中列出了{{1} }对象与我的JSON中的属性匹配。

我不知道如何处理字符串class Weather以及如何将JSON数据导入我的data

编辑

尝试使用以下答案中提到的List<Weather>,但是在尝试将其打印到控制台时出现错误JObject.Parse()

Cannot perform runtime binding on a null reference

2 个答案:

答案 0 :(得分:2)

从json访问描述值的步骤

为给定的json字符串创建模型类,Visual Studio为此提供了选项

编辑->粘贴特殊->将JSON粘贴为类

类外观

public class MyClass
{
    public class Coord {
       public int lon { get; set; }
       public int 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; } }
 ...

使用 NewtonSoft.JSON 库反序列化json

MyClass temp = JsonConvert.DeserializeObject<MyClass >(jsonString);

现在您可以通过以下方式访问Weather类的描述属性:

string output = temp.Weather.description

答案 1 :(得分:1)

您想研究反序列化 json。一个例子(尽管不是很容易维护)的最简单方法是将json转储到动态文件中并提取所需的字段;

dynamic d = JObject.Parse(data);
var description = d.description.ToString();

如果创建与JSON匹配的类(看起来您的Weather类不太匹配-main是嵌套对象而不是字符串),则可以使用 Json.DeserializeObject (data)