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を使うのが一般的です。
まとめ
この記事では、C#でJSONファイルを読み書きする際に欠かせないJsonSerializerとNewtonsoft.Jsonの使い方、その違い、さらにはJSONというデータ形式そのものの特徴についても丁寧に整理しながら学びました。JSONは人間にも読みやすい構造でありながら複雑なデータも扱える柔軟性があり、設定情報やアプリケーションデータ、外部サービスとの通信など多くの場面で活用される重要なデータ形式です。C#では標準ライブラリのJsonSerializerを使えば軽量で高速なJSON処理ができ、外部ライブラリのNewtonsoft.Jsonを活用すればより詳細な制御が可能になり、幅広い用途に対応できます。 JsonSerializerは標準機能として手軽に導入できる点が大きな魅力であり、基本的なシリアライズ・デシリアライズ操作をシンプルな記述で行えます。一方、Newtonsoft.Jsonは複雑なプロパティを持つオブジェクトや配列、多段階の構造を持つデータなど柔軟な操作が必要な場合に強く、読みやすい整形JSONを簡単に生成できる点が特徴です。それぞれの特徴を理解し、必要に応じて使い分けることで、C#におけるJSON処理は非常に強力な武器になります。 JSONの活用は、データ保存、設定ファイル管理、外部APIとの連携など多岐にわたります。アプリケーション内の状態を保存したい場合には書き出し処理を活用し、後で再現したいときには読み込み処理を利用するという流れが一般的であり、テキスト形式で扱えるためデータの確認や編集がしやすい点が開発を効率化します。今回の内容を理解することで、C#におけるデータ構造の取り扱いがよりスムーズとなり、実際の開発現場でも活用できる確かな基礎が身につきます。 以下には、今回の内容を振り返りながら応用的な例として、JsonSerializerとNewtonsoft.Jsonの両方を使ったサンプルプログラムをまとめています。
サンプルプログラム:2つの方法で同じデータを書き出す例
using System;
using System.IO;
using System.Text.Json;
using Newtonsoft.Json;
public class Config
{
public string AppName { get; set; }
public int Version { get; set; }
public string Author { get; set; }
}
class Program
{
static void Main()
{
Config config = new Config
{
AppName = "サンプルアプリ",
Version = 1,
Author = "開発者"
};
// JsonSerializerで書き出す
string json1 = JsonSerializer.Serialize(config);
File.WriteAllText("config_std.json", json1);
// Newtonsoft.Jsonで書き出す
string json2 = JsonConvert.SerializeObject(config, Formatting.Indented);
File.WriteAllText("config_newton.json", json2);
Console.WriteLine("2種類のJSONファイルを書き出しました。");
}
}
このように、同じオブジェクトであっても使用するライブラリによってJSONの見た目や扱い方が変わるため、用途に合わせた方法を選べる柔軟さがC#のJSON処理の魅力です。標準ライブラリで十分対応できる場合もあれば、細かな調整が必要な場面ではNewtonsoft.Jsonが強みを発揮します。両方の使い方を理解しておくことで、アプリケーション構築時の選択肢が広がり、より適切な設計ができるようになります。 JSON形式の理解は、データの送受信や保存だけでなく、日々のプログラミング作業の中でも頻繁に触れる重要な概念です。キーと値の関係を正確に把握し、データ構造を適切に設計することで、後のメンテナンス性にも大きく影響します。今回の学びをきっかけに、より複雑な構造を持つJSONや配列の扱いにも挑戦してみると良いでしょう。
生徒
「先生、JsonSerializerとNewtonsoft.Jsonの両方を使ってみると、それぞれ特徴が違うことがよく分かりました!」
先生
「その通りですね。標準か外部ライブラリかで用途が分かれますが、どちらもC#の開発では欠かせない存在ですよ。」
生徒
「特に、整形された読みやすいJSONを作れるNewtonsoft.Jsonは便利だと感じました。設定ファイルとかで使いやすそうです。」
先生
「そうですね。見た目の扱いやすさが必要な場合はとても有効です。一方で高速性が必要な場合は標準のJsonSerializerも強いので使い分けが重要です。」
生徒
「今回の内容を学んで、JSONの構造もC#での使い方も一気に理解が深まりました!次は配列やリストのJSONも扱ってみたいです!」
先生
「良い意欲ですね。配列や複雑な構造になるとさらに応用の幅が広がります。基本を押さえた今なら、きっとスムーズに理解できますよ。」