【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を扱う」
最近のコメント