對於C#我很新,我正在尋找對以下內容的幫助。將JSON從GET請求轉換爲C#Winforms應用程序中的文本框
我已經編寫了一些利用公司房屋API獲取與公司有關的信息的代碼(如下)。信息以JSON格式返回。
我需要做些什麼來獲取某些信息,並將其放入表單中已有的文本框中。我編寫的代碼能夠在消息框中返回,但我無法解決如何將其填充到文本框中。
private void getFromCompaniesHouse(object sender, EventArgs e)
{
try
{
//Compile request url
string url = "https://api.companieshouse.gov.uk/company/" + txtCompanyNumber.Text;
// Encode API key to ASCII
string api_key = "yfhOb66cRn7ZL1VgdFjVur5cs8u6j__bcNnKj9Qs:";
string encodedKey = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(api_key));
// Make get request using url and encoded API key
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
request.Headers.Add("Authorization", "Basic " + encodedKey);
request.ContentType = "application/json; charset=utf-8";
var response = (HttpWebResponse)request.GetResponse();
using (var streamReader = new StreamReader(response.GetResponseStream()))
{
MessageBox.Show(streamReader.ReadToEnd());
}
}
catch
{
MessageBox.Show("Cannot Make Request", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
的JSON返回這個樣子的:
{
"accounts":{
"accounting_reference_date":{
"month":"12",
"day":"31"
},
"last_accounts":{
"type":"group",
"made_up_to":"2015-12-31"
},
"next_made_up_to":"2016-12-31",
"next_due":"2017-09-30",
"overdue":false
},
"company_number":"08867781",
"annual_return":{
"last_made_up_to":"2016-06-20",
"overdue":false
},
"jurisdiction":"england-wales",
"has_been_liquidated":false,
"date_of_creation":"2014-01-29",
"undeliverable_registered_office_address":false,
"company_name":"VIRGIN ATLANTIC LIMITED",
"registered_office_address":{
"address_line_2":"Fleming Way",
"locality":"Crawley",
"country":"United Kingdom",
"region":"West Sussex",
"address_line_1":"Company Secretariat - The VHQ",
"postal_code":"RH10 9DF"
},
"type":"ltd",
"last_full_members_list_date":"2016-06-20",
"sic_codes":[
"70100"
],
"has_insolvency_history":false,
"etag":"cbab10bb8b9dc1db442cb585a63ae208c1265100",
"company_status":"active",
"has_charges":false,
"previous_company_names":[
{
"name":"VIRGIN ATLANTIC (HOLDINGS) LIMITED",
"effective_from":"2014-01-29",
"ceased_on":"2014-05-30"
}
],
"confirmation_statement":{
"next_made_up_to":"2017-06-20",
"overdue":false,
"next_due":"2017-07-04"
},
"links":{
"self":"/company/08867781",
"filing_history":"/company/08867781/filing-history",
"officers":"/company/08867781/officers"
},
"registered_office_is_in_dispute":false,
"can_file":true
}
**更新**
我有我的代碼更新到以下幾點:
private void getFromCompaniesHouse(object sender, EventArgs e)
{
try
{
//Compile request url
string url = "https://api.companieshouse.gov.uk/company/" + txtCompanyNumber.Text;
// Encode API key to ASCII
string api_key = "yfhOb66cRn7ZL1VgdFjVur5cs8u6j__bcNnKj9Qs:";
string encodedKey = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(api_key));
// Make get request using url and encoded API key
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
request.Headers.Add("Authorization", "Basic " + encodedKey);
request.ContentType = "application/json; charset=utf-8";
var response = (HttpWebResponse)request.GetResponse();
var rawJson = new StreamReader(response.GetResponseStream()).ReadToEnd();
var json = JObject.Parse(rawJson); //Turns your raw string into a key value lookup
string company_name = json["company_name"].ToObject<string>();
txtBusinessName.Text = company_name;
}
catch
{
MessageBox.Show("Cannot Make Request", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
我可以拉東西從RootObject
類,但不能訪問其他任何東西,例如在RegisteredOfficeAddress
課。有任何想法嗎?
很難幫助不知道JSON的樣子,這裏的「某些信息」是和/或如果您知道如何反序列化它 – Plutonix
你有沒有爲JSON定義的結構返回? – Eric
這裏有幾個步驟。一般來說,您想使用庫來將JSON轉換爲C#類(google C#反序列化json等),然後您可以將信息從那裏拉出並粘貼到文本框上,就像您通常設置文本一樣。 – mmcrae