2017-02-01 7 views
-2

私はAPIのものが初めてです。 このapi(http://services.groupkt.com/country/get/all)の結果をC#コードで取得したいと考えています。どのようなコードやチュートリアルも提案することで助けてくれますか?ありがとう 私はこのコードを試しましたが、それは動作しません。クライアント側の残りのAPIを呼び出すC#

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(); 
    } 
} 
+1

を追加することを忘れないでくださいは、いくつかの意味があります。コンパイラエラー、ランタイムエラー、または期待した結果が得られませんか? – Thangadurai

+0

結果をテキストエリアに表示しようとしていますが、結果が表示されません。 –

+0

ブラウザを使用してそのURLにアクセスし、何を取得しているかを確認します。また、サービスURLをテストするためにfiddlerを使用することもできます。 – Thangadurai

答えて

1

まず第一には、代わりに

client.GetStringAsync(url) 

秒の

client.GetStringAsync(url).Result 

を使用し、それが結果を解析することは非常に簡単になります。私は以前の回答を見て、彼らはすべてループを使用していましたが、私の意見では解析するのは良い考えではありません。 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>>(); 

これは完全に動作します。これをテストしました。

"それは仕事をdoesnot" Newtonsoft.JsonとNewtonsoft.Json.Linq名前空間に

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(); 
    } 
} 
+0

フロントエンドのコントロール名をこれに置き換えてください。たとえば、txtarea.Value = item [field_one_key_name] .ToString(); –

+0

私はawaitを呼び出していますダウンロードデータ();ボタンをクリックして結果をラベルに表示しても何も表示されない –

+0

この 'txtarea.InnerText = item [field_one_key_name] .ToString();' –

0

追加するだけで、コードはより明確に通信できるように、ここでダイナミクスを優先します。ちょうどあなたは、「ASP.NET-のWeb-API」で標識された質問にtxtarea.InnerText = ...を行うためのビット奇妙に思えるよう

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(); 
    } 
} 

さて、それは、Web APIを使用してASP.NET MVC以上の古典的なWebフォームアプリケーションです?あなたはJSONを受け取った後

関連する問題