我刚刚开始编程。获取温度并将其显示在屏幕上的简单方法是什么?我想写一个简单的程序。
static void Main()
{
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://api.openweathermap.org");
var response = client.GetAsync($"/data/2.5/weather?q=London,UK&appid={APIKey}&units=metric");
// What do I place here??
Console.WriteLine(Main.Temp);
}
答案 0 :(得分:3)
您需要在这里考虑2个概念:
HttpClient.GetAsync()
是一种异步方法。在Microsoft's documentation中有一个很好的使用异步API的演练。
但是要点在于,该方法不会从端点返回数据。它返回一个“承诺”;代表将来将可用的数据的东西。由于您的程序没有执行任何其他操作,因此您可以await
进行操作,如下所示:
var response = await client.GetAsync();
但是,当然,您需要首先创建封闭方法async
。根据您的情况,将Main()
函数的签名更改为:
static async Task Main(string[] args)
您正在呼叫的端点以JSON格式返回其数据。由于您只是在学习,所以我不会费心尝试查找实际的架构或客户端库。
您应该做的是为响应中的每个字段创建一个具有属性的类,然后反序列化为该类,如下所示: https://www.newtonsoft.com/json/help/html/DeserializeObject.htm
答案 1 :(得分:0)
使用约翰的答案:
using System;
using System.Net.Http;
using System.Threading.Tasks;
using Newtonsoft.Json;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApp1
{
class Program
{
static async Task Main()
{
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://api.openweathermap.org");
var response = await client.GetAsync($"/data/2.5/weather?q=London,UK&appid=c44d8aa0c5e588db11ac6191c0bc6a60");
// This line gives me error
var stringResult = await response.Content.ReadAsStringAsync();
var obj = JsonConvert.DeserializeObject<dynamic>(stringResult);
var tmpDegreesF = Math.Round(((float)obj.main.temp * 9 / 5 - 459.67),2) ;
Console.WriteLine($"Current temperature is {tmpDegreesF}°F");
Console.ReadKey();
}
}
}
找到类似于netcoreapp2.1的内容 在此行下,添加7.1-这将指示VS和编译器根据C#7.1规则检查代码/编译代码
更新:从上面我也读到了什么,我可以创建JSON类来表示数据(最简单的方法是使用“编辑|选择性粘贴”菜单),或者反序列化为动态。