C#でJSONファイルを読み書きする方法(JsonSerializer・Newtonsoft.Json)
生徒
「先生、C#でデータをJSONファイルに保存したり、読み込んだりする方法ってありますか?」
先生
「もちろんありますよ。C#ではJsonSerializerやNewtonsoft.Jsonというライブラリを使って、簡単にJSONの読み書きができます。」
生徒
「JSONってよく聞きますけど、そもそも何なんですか?」
先生
「JSONはデータを保存したりやり取りしたりするためのフォーマットで、『JavaScript Object Notation』の略なんです。C#でもよく使われていますよ。」
生徒
「なるほど!それじゃあ、C#でどうやってJSONを扱うのか教えてください!」
先生
「いいですね。それでは、C#でのJSONファイルの読み書き方法を、順番に見ていきましょう。」
1. JSONとは?そしてC#での活用場面
JSON(ジェイソン)は、データを「人間にも読みやすい形」で保存できるテキスト形式です。たとえば、設定情報やアプリのデータ保存、APIとの通信などでよく使われます。C#でJSONを扱うと、プログラム内のデータをファイルに保存したり、他のアプリとデータをやり取りしたりできるようになります。
JSONの基本構造は「キー」と「値」の組み合わせです。例えば次のようなものです。
{
"Name": "太郎",
"Age": 25,
"City": "東京"
}
このように、名前と値をペアで表現することで、どんなデータでも整理して保存できます。
2. JsonSerializerを使ったJSONの読み書き
C#の標準ライブラリ(.NET 5以降)では、System.Text.Json名前空間のJsonSerializerクラスを使って簡単にJSONを扱うことができます。特別な外部ライブラリをインストールしなくても使えるのが利点です。
まずは、オブジェクトをJSONファイルに書き出す例を見てみましょう。
using System;
using System.IO;
using System.Text.Json;
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string City { get; set; }
}
class Program
{
static void Main()
{
Person person = new Person { Name = "太郎", Age = 25, City = "東京" };
string jsonString = JsonSerializer.Serialize(person);
File.WriteAllText("person.json", jsonString);
Console.WriteLine("JSONファイルを書き出しました。");
}
}
JSONファイルを書き出しました。
JsonSerializer.Serialize()メソッドでオブジェクトをJSON文字列に変換し、それをFile.WriteAllText()でファイルに保存しています。
次に、保存したJSONファイルを読み込む例を見てみましょう。
using System;
using System.IO;
using System.Text.Json;
class Program
{
static void Main()
{
string jsonString = File.ReadAllText("person.json");
Person person = JsonSerializer.Deserialize<Person>(jsonString);
Console.WriteLine($"名前: {person.Name}");
Console.WriteLine($"年齢: {person.Age}");
Console.WriteLine($"都市: {person.City}");
}
}
名前: 太郎
年齢: 25
都市: 東京
Deserialize()メソッドを使うことで、JSONデータを元のクラスに戻せます。これにより、ファイルに保存したデータをそのままC#のオブジェクトとして扱うことができます。
3. Newtonsoft.Json(Json.NET)を使う方法
次に紹介するのは、C#で長年使われている人気ライブラリNewtonsoft.Json(別名:Json.NET)です。標準ライブラリより柔軟に設定でき、読みやすいJSONを生成できます。使うには、Visual StudioのNuGetパッケージマネージャーから「Newtonsoft.Json」をインストールしてください。
書き出し(シリアライズ)の例は次の通りです。
using System;
using System.IO;
using Newtonsoft.Json;
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string City { get; set; }
}
class Program
{
static void Main()
{
Person person = new Person { Name = "花子", Age = 30, City = "大阪" };
string json = JsonConvert.SerializeObject(person, Formatting.Indented);
File.WriteAllText("person_newton.json", json);
Console.WriteLine("Newtonsoft.JsonでJSONを書き出しました。");
}
}
Newtonsoft.JsonでJSONを書き出しました。
Formatting.Indentedを指定することで、インデント(空白)がついた読みやすいJSONになります。結果は次のように整形されます。
{
"Name": "花子",
"Age": 30,
"City": "大阪"
}
同様に、読み込み(デシリアライズ)は次のように行います。
using System;
using System.IO;
using Newtonsoft.Json;
class Program
{
static void Main()
{
string json = File.ReadAllText("person_newton.json");
Person person = JsonConvert.DeserializeObject<Person>(json);
Console.WriteLine($"名前: {person.Name}");
Console.WriteLine($"年齢: {person.Age}");
Console.WriteLine($"都市: {person.City}");
}
}
名前: 花子
年齢: 30
都市: 大阪
Newtonsoft.Jsonは、日付や特殊文字の扱いなども柔軟に設定できるため、より複雑なデータ構造を扱う際に便利です。
4. JsonSerializerとNewtonsoft.Jsonの違い
最後に、この2つの違いを整理しておきましょう。
- JsonSerializer(System.Text.Json):標準ライブラリ。高速で軽量。外部ライブラリ不要。
- Newtonsoft.Json:外部ライブラリだが高機能。フォーマット設定や特殊ケースに強い。
軽い処理やシンプルな用途にはJsonSerializer、カスタマイズや細かい設定をしたいときはNewtonsoft.Jsonを使うのが一般的です。