本文へスキップ
BecomeCoder

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

JSONデシリアライズ

ブラウザで完結

導入

APIが返す{"name":"Taro","age":20}はただの文字列です。これをC#のオブジェクトに変換して、.Nameのように扱えるようにするのがデシリアライズSystem.Text.Jsonが担います。

図解

flowchart LR
    J["JSON文字列<br/>{&quot;name&quot;:&quot;Taro&quot;,&quot;age&quot;:20}"] -->|Deserialize&lt;User&gt;| O["User オブジェクト<br/>Name=Taro, Age=20"]
    style O fill:#e8f5e9

サンプル

string json = """
{ "name": "Taro", "age": 20 }
""";

// JSON文字列 → C#オブジェクト
var options = new JsonSerializerOptions { PropertyNameCaseInsensitive = true };
User user = JsonSerializer.Deserialize<User>(json, options)!;

Console.WriteLine($"{user.Name}{user.Age}歳)");   // Taro(20歳)

record User(string Name, int Age);
  • JsonSerializer.Deserialize<型>(json)でJSON文字列をオブジェクトに変換
  • 受け皿はrecordが最適(データの入れ物)
  • PropertyNameCaseInsensitive"name"Nameの大文字小文字差を吸収

演習

string json = """
[ { "name": "コーヒー", "price": 500 }, { "name": "ケーキ", "price": 400 } ]
""";

// TODO: List<Item> にデシリアライズし、price の合計を "合計: 900円" と出力してください
//       (Item は name, price を持つ record)
var options = new JsonSerializerOptions { PropertyNameCaseInsensitive = true };
___
  • 期待される出力: 合計: 900円
ヒント1を見る

JsonSerializer.Deserialize<List<Item>>(json, options) の後 LINQ のSum

ヒント2を見る

var items = JsonSerializer.Deserialize<List<Item>>(json, options)!; Console.WriteLine($"合計: {items.Sum(i => i.Price)}円"); record Item(string Name, int Price);

まとめ

  • JsonSerializer.Deserialize<型>でJSON→オブジェクト
  • 受け皿はrecordが便利
  • 大文字小文字差はオプションで吸収

次回: 逆にオブジェクトをJSONにする「シリアライズ」です。

実際に動かしてみよう

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

C# — ブラウザ内で実行

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