C# 从JSON API数据获取字段

C# 从JSON API数据获取字段,c#,C#,如何从JSON文本中获取特定字段? 我正在开发一个在线票务商店,在注册表单中,用户必须填写一个国家/地区组合框。我使用RESTful API动态填充该组合框:。我只需要获取名称字段并将其添加到我的组合框中。我该怎么做 到目前为止,我的代码是: protected void Page_Load(object sender, EventArgs e) { List<Country> countries = GetCountryNames();

如何从JSON文本中获取特定字段? 我正在开发一个在线票务商店,在注册表单中,用户必须填写一个国家/地区组合框。我使用RESTful API动态填充该组合框:。我只需要获取名称字段并将其添加到我的组合框中。我该怎么做

到目前为止,我的代码是:

protected void Page_Load(object sender, EventArgs e)
        {
            List<Country> countries = GetCountryNames();
            foreach(Country country in countries)
            {
                country_dropdown_list.Items.Add(country.getCountryName());
            }
        }

        //Calls API to fill combobox with country names
        protected List<Country> GetCountryNames() 
        {
            HttpWebRequest request = 
            (HttpWebRequest)WebRequest.Create(string.Format("https://restcountries.eu/rest/v2/all"));
            request.Method = "GET";

            HttpWebResponse response = (HttpWebResponse)request.GetResponse();

            Console.WriteLine(response.StatusCode);
            Console.WriteLine(response.Server);

            string jsonString;
            using(Stream stream = response.GetResponseStream()) 
            {
                StreamReader reader = new StreamReader(stream, System.Text.Encoding.UTF8);
                jsonString = reader.ReadToEnd();

                List<String> countries = JsonConvert.DeserializeObject<List<String>>(jsonString);
            }

            return countries;
        }
受保护的无效页面加载(对象发送方,事件参数e)
{
List countries=GetCountryNames();
foreach(国家中的国家)
{
country_下拉列表_list.Items.Add(country.getCountryName());
}
}
//调用API以使用国家/地区名称填充组合框
受保护列表GetCountryNames()
{
HttpWebRequest请求=
(HttpWebRequest)WebRequest.Create(string.Format(“https://restcountries.eu/rest/v2/all"));
request.Method=“GET”;
HttpWebResponse=(HttpWebResponse)request.GetResponse();
Console.WriteLine(响应状态码);
Console.WriteLine(response.Server);
字符串jsonString;
使用(Stream=response.GetResponseStream())
{
StreamReader=新的StreamReader(stream,System.Text.Encoding.UTF8);
jsonString=reader.ReadToEnd();
List countries=JsonConvert.DeserializeObject(jsonString);
}
返回国;
}

我正在使用一个自定义类进行反序列化,但我认为我可以通过一个字符串列表来管理它。

您使用的API的文档页面显示并检索您想要的字段,例如:

https://restcountries.eu/rest/v2/all?fields=name;capital;currencies
就HTTP而言,JSON只是文本。除非服务本身提供了返回特定字段的方法,否则无法告诉服务返回特定字段。否则,您必须检索整个响应并对其进行解析

最后,HttpWebRequest是一个遗留类,在HttpClient可用时不应使用。在.NET核心中,HttpWebRequest是HttpClient上的遗留外观

在.NET 5中,您可以使用对HttpClient的一次调用替换所有代码,并且:

记录国家(字符串名称);
...
变量url=”https://restcountries.eu/rest/v2/all?fields=name";
var countries=wait client.GetFromJsonAsync(url);

一般来说,大多数公共API都有减少其输出的方法——或者向您收费。所有主机和云服务提供商对出站流量收费。除非站点有办法过滤其输出,否则它将为您的请求付费。

您使用的API的文档页面显示并检索您想要的字段,例如:

https://restcountries.eu/rest/v2/all?fields=name;capital;currencies
就HTTP而言,JSON只是文本。除非服务本身提供了返回特定字段的方法,否则无法告诉服务返回特定字段。否则,您必须检索整个响应并对其进行解析

最后,HttpWebRequest是一个遗留类,在HttpClient可用时不应使用。在.NET核心中,HttpWebRequest是HttpClient上的遗留外观

在.NET 5中,您可以使用对HttpClient的一次调用替换所有代码,并且:

记录国家(字符串名称);
...
变量url=”https://restcountries.eu/rest/v2/all?fields=name";
var countries=wait client.GetFromJsonAsync(url);

一般来说,大多数公共API都有减少其输出的方法——或者向您收费。所有主机和云服务提供商对出站流量收费。除非网站有办法过滤其输出,否则它将为您的请求付费。

为什么您要使用HttpWebRequest而不是HttpClient?在.NET核心中,HttpWebRequest只是HttpClient上的一个遗留外观。此外,就HTTP而言,JSON只是文本。无法检索特定字段,需要检索整个响应。除非API只允许检索特定字段,否则您必须检索并解析整个响应。为什么要使用HttpWebRequest而不是HttpClient?在.NET核心中,HttpWebRequest只是HttpClient上的一个遗留外观。此外,就HTTP而言,JSON只是文本。无法检索特定字段,需要检索整个响应。除非API只允许检索特定字段,否则您将不得不检索和解析整个响应。完全错过了文档中的这一部分,谢谢!它现在可以完美地工作了,完全错过了文档中的这一部分,谢谢!它现在工作得很好