我是api的新手。 我想在c#代码中获得此api(http://services.groupkt.com/country/get/all)的结果。你可以通过建议任何代码和教程来帮助我。谢谢 我试过这段代码,但它不起作用。
public async Task DownloadData()
{
string url = string.Format("http://services.groupkt.com/country/get/all");
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("Accept", "application/json");
var jsonString = await client.GetStringAsync(url);
JToken token = JToken.Parse(jsonString);
foreach (var item in token)
{
txtarea.Value= item.ToString();
}
}
答案 0 :(得分:1)
首先使用
client.GetStringAsync(url).Result
而不是
client.GetStringAsync(url)
第二次收到json后,解析结果变得非常简单。我看到之前的回答,他们都在使用循环,在我看来解析并不是一个好主意。
在这种情况下使用Newtonsoft.Json
库及其非常方便。我已使用此库解析了您的json响应。
制作一类结果,即
public class result
{
public string name { get; set; }
public string alpha3_code { get; set; }
public string alpha2_code { get; set; }
}
在获取json响应以解析你的json之后输入这段代码。
JObject jsonResponse = JObject.Parse(jsonString);
JObject objResponse = (JObject)jsonResponse["RestResponse"];
Dictionary<string, JArray> _Data = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, JArray>>(objResponse.ToString());
var results = _Data["result"].ToObject<List<result>>();
它完美无缺,我已经对此进行了测试。
不要忘记添加Newtonsoft.Json和Newtonsoft.Json.Linq命名空间
答案 1 :(得分:0)
您的代码正确获取响应。但解析不正确。
尝试以下完整解析代码。
public async Task DownloadData()
{
string url = string.Format("http://services.groupkt.com/country/get/all");
string top_parent_key_name = "RestResponse";
string second_parent_key_name = "result";
string field_one_key_name = "name";
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("Accept", "application/json");
var jsonString = await client.GetStringAsync(url);
JToken token = JToken.Parse(jsonString);
foreach (var item in token[top_parent_key_name][second_parent_key_name])
{
txtarea.InnerText = item[field_one_key_name].ToString();
}
}
答案 2 :(得分:0)
添加,我更喜欢动态,所以代码沟通得更清楚。
public async Task DownloadData()
{
string url = $"http://services.groupkt.com/country/get/all";
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("Accept", "application/json");
string response = await client.GetStringAsync(url);
dynamic json = JToken.Parse(response);
foreach (var item in token.RestResponse.result)
{
//Note: Your over writing the text here for each item you pass
// Did you mean to concat instead? += "\n\r" + item.name;
txtarea.InnerText = item.ToString();
}
}
现在至于在标记为&#34; ASP.NET-Web-Api&#34;的问题中执行txtarea.InnerText = ...
。看起来有点奇怪,它是带有Web Api的ASP.NET MVC还是更经典的Web窗体应用程序?