我正在开发一个 winform 应用程序,并且正在对 GoogleMaps API 进行 API 调用。但由于某种原因,我无法得到回应。或者实际上,我确实得到了回应,但无法对它做任何事情。
我的代码:
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace GoogleMaps
{
public partial class Main : Form
{
public Main()
{
InitializeComponent();
setup().Wait();
}
static HttpClient client = new HttpClient();
static async Task setup()
{
client.BaseAddress = new Uri("https://maps.googleapis.com/maps/api/geocode/json");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
}
static async Task<Result> getAdress(int huisnummer, string postcode)
{
Result address = null;
HttpResponseMessage response = await client.GetAsync($"?address=00+1234AB&key=MYKEY");
if (response.IsSuccessStatusCode)
{
address = await response.Content.ReadAsAsync<Result>();
}
return address;
}
private async void BTN_submit_Click(object sender, EventArgs e)
{
Result address = new Result();
address = await getAdress(31, "8256SC");
richTextBox1.Text = "address is:" + address.formatted_address;
}
}
}
Run Code Online (Sandbox Code Playgroud)
还有我的“将 JSON 粘贴为类”类:
namespace GoogleMaps
{
public class Rootobject
{
public Result[] results { get; set; }
public string status { get; set; }
}
public class Result
{
public Address_Components[] address_components { get; set; }
public string formatted_address { get; set; }
public Geometry geometry { get; set; }
public string place_id { get; set; }
public string[] types { get; set; }
}
public class Geometry
{
public Location location { get; set; }
public string location_type { get; set; }
public Viewport viewport { get; set; }
}
public class Location
{
public float lat { get; set; }
public float lng { get; set; }
}
public class Viewport
{
public Northeast northeast { get; set; }
public Southwest southwest { get; set; }
}
public class Northeast
{
public float lat { get; set; }
public float lng { get; set; }
}
public class Southwest
{
public float lat { get; set; }
public float lng { get; set; }
}
public class Address_Components
{
public string long_name { get; set; }
public string short_name { get; set; }
public string[] types { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
我现在的输出只是什么。但我确实收到了 200 条回复。我该如何解决?
您正在反序列化为不正确的类。正确的类是Rootobject
address = await response.Content.ReadAsAsync<Rootobject>();
Run Code Online (Sandbox Code Playgroud)
而不是使用 Result
address = await response.Content.ReadAsAsync<Result>();
Run Code Online (Sandbox Code Playgroud)
示例地理编码 API 响应(来自 Google API 文档):
{
"results" : [
{
"address_components" : [
{
"long_name" : "1600",
"short_name" : "1600",
"types" : [ "street_number" ]
}]
...
}],
"status" : "OK"
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10201 次 |
| 最近记录: |