shuhelohelo’s blog

Xamarin.Forms多めです.

HttpClientを使って受け取ったJSON形式のレスポンスをデシリアライズする方法

方法としてはSystem.Text.Jsonを使ってJSON文字列をデシリアライズするか,System.Net.Http.Jsonを使ってレスポンスから直接オブジェクトを取得するか,がある.

System.Text.Jsonを利用するためにはNugetからインストールします.

System.Net.Http.Jsonを利用するためには,Nugetからパッケージをインストールします.

f:id:shuhelohelo:20200615173758p:plain

                List<Prefecture> prefecturesData=null;
                HttpResponseMessage response = null;

                #region Method1 responseを受け取ってから文字列→System.Text.Jsonを使ってオブジェクトへ
                //リクエストを投げて,結果を取得する
                //BaseAddressを予め設定してあるので,BaseAddress以降をパラメータとして与えるだけでよい
                response = await this._httpClient.GetAsync("prefectures");

                if(response.IsSuccessStatusCode)
                {
                    //response.EnsureSuccessStatusCode();

                    //レスポンスからJSON文字列を取得
                    var prefecturesJsonString = await response.Content.ReadAsStringAsync();

                    //JSON文字列をデシリアライズしてList<Prefecture>型のデータに変換
                    prefecturesData = JsonSerializer.Deserialize<List<Prefecture>>(prefecturesJsonString);
                }
                else
                {

                }
                #endregion
                #region Method2 1つのメソッドでリクエストの送信とレスポンスの受信,デシリアライズまで System.Net.Http.Json
                try
                {
                    prefecturesData = await this._httpClient.GetFromJsonAsync<List<Prefecture>>("prefectures");
                }
                catch (Exception ex)
                {

                }
                #endregion
                #region Method3 responseのContentからデシリアライズ System.Net.Http.Json
                 response = await this._httpClient.GetAsync("prefectures");

                if(response.IsSuccessStatusCode)
                {
                    prefecturesData = await response.Content.ReadFromJsonAsync<List<Prefecture>>();
                }
                else
                {

                }
                #endregion

                //プロパティに入れる
                this.PrefecturesData = prefecturesData;

ソースコード

github.com