C#でJSONを簡単に扱う方法|初心者にもわかりやすいサンプル付き解説

現代のアプリケーション開発においてJSONは、データの受け渡しや保存に欠かせないフォーマットです。C#を使ってWeb APIと連携する際や、設定ファイルを読み込む際にもJSONはよく使われます。しかし、初めて扱う方には「どうやって読み書きするの?」と迷うこともあるでしょう。この記事では、C#でJSONを扱う基本的な方法から、応用的なテクニックまで、初心者にもわかりやすくサンプルコード付きで解説します。Visual Studioを使ってすぐに試せる内容になっているので、ぜひ手を動かしながら学んでみてください。


JSONとは?簡単なおさらい

JSON(JavaScript Object Notation)は、データをキーと値のペアで表す軽量なデータフォーマットです。以下のような形式で表現されます。

{
"name": "山田太郎",
"age": 30,
"isMember": true
}

テキスト形式のため、人間が読みやすく、なおかつプログラムでも解析しやすいという特徴があります。C#では、このJSONを「シリアライズ(オブジェクト → JSON文字列)」と「デシリアライズ(JSON文字列 → オブジェクト)」することで扱います。


C#でJSONを扱うための準備

C#でJSONを扱うには主に以下の2つの方法があります。

  1. System.Text.Json(.NET Core 3.0以降の標準)
  2. Newtonsoft.Json(Json.NET)という外部ライブラリ

この記事では、まず標準の System.Text.Json を中心に解説し、後半で Newtonsoft.Json も紹介します。

必要な準備は次の通りです。

  • .NET 6以上のプロジェクト(Visual Studio推奨)
  • JSONを格納するためのクラス定義

JSONの読み込み(デシリアライズ)

まずは、JSON文字列をC#のオブジェクトに変換する方法です。

1. クラスを定義する

public class User
{
public string Name { get; set; }
public int Age { get; set; }
public bool IsMember { get; set; }
}

2. JSON文字列を読み込む

using System.Text.Json;

string json = @"{ ""Name"": ""山田太郎"", ""Age"": 30, ""IsMember"": true }";
User user = JsonSerializer.Deserialize<User>(json);

Console.WriteLine(user.Name); // 山田太郎

JsonSerializer.Deserialize<T>() メソッドで、JSON文字列を指定のクラスに変換できます。


JSONの書き出し(シリアライズ)

オブジェクトをJSON文字列に変換する方法です。

User user = new User
{
Name = "佐藤花子",
Age = 25,
IsMember = false
};

string json = JsonSerializer.Serialize(user);
Console.WriteLine(json);
// {"Name":"佐藤花子","Age":25,"IsMember":false}

このように、JsonSerializer.Serialize() を使えば、すぐにJSON形式に変換可能です。


JSONファイルの読み書き

JSONをファイルに保存したり、ファイルから読み込んだりするのも簡単です。

JSONファイルの保存

File.WriteAllText("user.json", JsonSerializer.Serialize(user));

JSONファイルの読み込み

string fileContent = File.ReadAllText("user.json");
User userFromFile = JsonSerializer.Deserialize<User>(fileContent);

ファイル操作には System.IO 名前空間が必要です。


Newtonsoft.Jsonを使った方法(Json.NET)

.NET Framework やより多機能な操作を行いたい場合は、Newtonsoft.Json がおすすめです。

NuGetパッケージのインストール

Visual Studioで以下のコマンドを使うか、NuGet GUIからインストールします。

Install-Package Newtonsoft.Json

使用例(デシリアライズ)

using Newtonsoft.Json;

string json = @"{ ""Name"": ""田中一郎"", ""Age"": 40, ""IsMember"": true }";
User user = JsonConvert.DeserializeObject<User>(json);
Console.WriteLine(user.Name); // 田中一郎

使用例(シリアライズ)

string output = JsonConvert.SerializeObject(user, Formatting.Indented);
Console.WriteLine(output);

Formatting.Indented を指定することで、見やすい整形されたJSONに変換できます。


JSON配列の扱い方

複数のオブジェクトを扱うJSON配列もよく使われます。

[
{ "Name": "山田", "Age": 28, "IsMember": true },
{ "Name": "佐藤", "Age": 34, "IsMember": false }
]

これを List<User> に変換するには:

string jsonArray = File.ReadAllText("users.json");
List<User> users = JsonSerializer.Deserialize<List<User>>(jsonArray);

foreach (var user in users)
{
Console.WriteLine($"{user.Name} ({user.Age})");
}

応用:匿名型や辞書型での扱い

型がわからないJSONを柔軟に扱いたい場合、以下のように Dictionary<string, object> で受け取る方法があります(Newtonsoft.Json使用)。

var data = JsonConvert.DeserializeObject<Dictionary<string, object>>(json);
Console.WriteLine(data["Name"]);

または、dynamic を使って柔軟にアクセスも可能です。

dynamic obj = JsonConvert.DeserializeObject(json);
Console.WriteLine(obj.Name);

よくあるエラーと対処法

クラスのプロパティ名が一致しない

デフォルトでは、C#のプロパティ名とJSONのキー名が一致している必要があります。違う場合は属性を付けましょう。

public class User
{
[JsonPropertyName("full_name")] // System.Text.Jsonの場合
public string Name { get; set; }
}

DateTime型の扱いに注意

標準のJSONライブラリでは、日付フォーマットに制限があるため、日付型を扱う際にはフォーマットに注意が必要です。


まとめ

C#でJSONを扱うには、標準の System.Text.Json を使えば簡単にシリアライズ/デシリアライズが可能です。より柔軟な操作が必要な場合は Newtonsoft.Json を使うとよいでしょう。JSONの扱いは現代の開発において必須スキルなので、ぜひ本記事のサンプルを参考に、実際にコードを書いて感覚を掴んでみてください。

タイトルとURLをコピーしました