尝试使用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"
对象并提取属性main
和description
,并在我的GetWeather
中返回一个列表,其中列出了{{1} }对象与我的JSON
中的属性匹配。
我不知道如何处理字符串class Weather
以及如何将JSON数据导入我的data
。
编辑
尝试使用以下答案中提到的List<Weather>
,但是在尝试将其打印到控制台时出现错误JObject.Parse()
。
Cannot perform runtime binding on a null reference
答案 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