本文へスキップ
BecomeCoder

C#実践コース · 第2章 HTTP通信 · レッスン12

JSONシリアライズ

ブラウザで完結

導入

シリアライズはデシリアライズの逆——C#オブジェクトをJSON文字列に変換する操作です。APIへデータを送るときに使います。

図解

flowchart LR
    O["User オブジェクト<br/>Name=Hanako, Age=25"] -->|Serialize| J["JSON文字列<br/>{&quot;Name&quot;:&quot;Hanako&quot;,&quot;Age&quot;:25}"]

サンプル

var user = new User("Hanako", 25);

// C#オブジェクト → JSON文字列
string json = JsonSerializer.Serialize(user);
Console.WriteLine(json);   // {"Name":"Hanako","Age":25}

// 整形(人が読みやすく)するオプション
var pretty = JsonSerializer.Serialize(user, new JsonSerializerOptions { WriteIndented = true });
Console.WriteLine(pretty);
// {
//   "Name": "Hanako",
//   "Age": 25
// }

record User(string Name, int Age);
  • JsonSerializer.Serialize(オブジェクト)でオブジェクト→JSON文字列
  • WriteIndented = trueで人が読みやすく整形できる
  • APIへPOSTするデータの作成などに使う
  • 既定では日本語などASCII以外の文字は\uXXXX形式(例: マウス →\u30DE\u30A6\u30B9)にエスケープされる。JSONとしては正しく、読み込む側は元に戻せる。そのまま日本語で出したいときはEncoder = JavaScriptEncoder.UnsafeRelaxedJsonEscapingをオプションに指定する

演習

var product = new Product("Mouse", 2980);

// TODO: product を JSON文字列にシリアライズして出力してください
//       (期待: {"Name":"Mouse","Price":2980})
___

record Product(string Name, int Price);
  • 期待される出力: {"Name":"Mouse","Price":2980}
ヒント1を見る

JsonSerializer.Serialize(product)

ヒント2を見る

Console.WriteLine(JsonSerializer.Serialize(product));

まとめ

  • JsonSerializer.Serializeでオブジェクト→JSON
  • WriteIndentedで整形出力
  • 送信データの作成に使う

次回: データを送る・更新する・消す「POST/PUT/DELETE」です。

実際に動かしてみよう

本文のサンプルや演習のコードは、コードブロック右上の「コピー」ボタンでコピーして、下のエディタに貼り付ければそのまま実行できます。

C# — ブラウザ内で実行

ブラウザ内でC#を動かす環境を読み込みます(初回のみ数秒)。
スクロールして表示された時点でも自動で読み込まれます。

次のレッスンへ →