トルネード

毛利のメモ書き

UWP 入門 - HttpClientからJSON取得

f:id:mojeld:20180824151545p:plain

Visual Studio 2017 UWP C#で、RESTへ接続しJSON取得するコードです。RESTへの接続は、HttpClientクラスを使います。 JSONデータは下記のようなデータです。

{"hoge":1010,"hoge2":"鉄人"}

JSON文字コードはUTF8です。UTF8のJSONデータ取得してからUnicodeに変換する関数を作ります。

private async Task<string> UTF8ResponseMessageAsync(HttpResponseMessage result)
{
    byte[] isoBites = Encoding.GetEncoding("ISO-8859-1").GetBytes(Regex.Unescape(await result.Content.ReadAsStringAsync()));
    return Encoding.UTF8.GetString(isoBites, 0, isoBites.Length);
}

この関数は、Stackoverflowの記事を参考にしています。

HttpClientクラスを使ったコード例です。

using Windows.Web.Http;
using Windows.Data.Json;
using System.Threading.Tasks;
using System.Text.RegularExpressions;
using System.Text;

private async void Button_Click(object sender, RoutedEventArgs e)
{
    //
    HttpClient http_ = new HttpClient();
    Uri request_url = new Uri("https://xxxxxx.execute-api.ap");
    HttpResponseMessage res_ = new HttpResponseMessage();
    res_ = await http_.GetAsync(request_url);

    string s = await UTF8ResponseMessageAsync(res_);

    JsonObject jo = JsonObject.Parse(s);
    int c_ = jo.Count(); //オブジェクトの数が取得できます。
    string o_;
    foreach(var key_ in jo.Keys)
    {
        try
        {
            o_ = jo.GetNamedValue(key_).GetNumber().ToString();

        }
        catch
        {
            o_ = jo.GetNamedValue(key_).GetString();
        }
        Edit1.Text = Edit1.Text + o_;
    }
}

C#JSONでいろいろググったのですが、シリアライズのことばかり書いていてめんどくさいと思ったんですが、 Windows.Data.Jsonを使えばシンプルです。 JsonObject.Parse すればJsonObject型でパースしてくれます。