【C#】HTTPリクエスト→JSONレスポンス

C#でWebAPIを叩いて,その結果をjson形式で取得しようと思ったひとは少なからずいるんじゃないだろうか?特に今はAndroidアプリもC#でかけるような時代だから.

でことで今回の記事は,そんなC#でGETなりPOSTなりでhttpリクエストを送り,その結果をjsonで受け取ってみようってお話です.

jsonモデルを用意する

Newtonsoft.Json

今回,jsonを扱うためのモジュールとしてNewtonsoftというものを使用します.ということで,NuGetで入れましょう.

jsonモデルを定義する

次に,使用するjsonのモデルを用意しましょう.ひとまず下のようなモデルをソースに起こすことにします.

{
  "first-name",
  "family-name"
  "age",
  "birthday"
}

これを,jsonmodel.csというファイル(名前はなんでもいい)に起こすとこんな感じです.

using Newtonsoft.Json 
[JsonObject] 
public class person{
   [JsonProperty("first-name")]
   public string firstName{get; private set;}
   [JsonProperty("family-name")]
   public string familyName{get; private set;}
   [JsonProperty("age")]
   public int age{get; private set;} 
    [JsonProperty("birthday")]
   public string birthday{get; private set;}
 };

とまぁこんな感じでしょう.メンバをJsonPropertyで実際のキーに対応させるような感じです.

リクエストを送る

リクエストを送るには,System.Net.Httpを使用します.これはGETもPOSTも同様です.

using System.Net.Http
 ~~~~ 
var client = new HttpClient();

GETリクエスト

HttpClient内で定義されているGetAsyncメソッドを使用することでGETリクエストをサーバに投げることができます.

var responce = await client.GetAsync("ServerURL?hoge=xxx&fuga=yyy");

POSTリクエスト

GETの時の感じで,HttpClient内で定義されているPostAsyncメソッドを使用することでPOSTリクエストをサーバに投げることができます.POSTする内容も一緒に指定する必要があります.

var content = new StringContent("something post argument");
var responce = await client.PostAsync("ServerURL", content);

もしjsonをPOSTしたいなら,こんな感じでやればいいです.

using Newtonsoft.Json
~~~~~~~
var json = JsonConvert.SerializeObject(new jsonModel()); // 何かしらのjsonモデル
var content = new StringContent(json, Encording.UTF8, "application/json");
var responce = await client.PostAsync("ServerURL", content);

レスポンスを受け取る

レスポンスの受け取り方はGETでもPOSTでも同じです.

var resString = await responce.Content.ReadAsStringAsync();

ちなみに,responce.StatusCodeにステータスコードが入ってるので,これがSystem.Net.HttpStatusCode.OKの時だけレスポンスの読み取りをやった方がいいかもしれません.

jsonに変換する

最後に,受け取ったやつをjson形式にデシリアイズします.一瞬です.

var resJson = JsonConvert.DeserializeObject(resString);

さっき作成したpersonってモデルに変換してるわけだけども,キーの不一致があったりとかすると落ちます.あと,APIによっては配列形式で返してたりとかもあります.配列形式で返ってきてたらこうします.

using System.Collections.Generic;
~~~~~~~~
var resJson = JsonConvert.DeserializeObject>(resString);

とまぁこんな感じですかねぇ.

-2019年07月18日追記-

Newtonsoft.jsonの使い方を軽くまとめてみたので、良かったら読んでみてください「C#でjsonを扱う

あわせて読みたい

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です