C#でJSON・XML操作をマスター!初心者向けデータ保存・読み込み完全ガイド
生徒
「C#で作ったアプリのデータを保存したいのですが、JSONとかXMLって何ですか?」
先生
「JSONやXMLは、データを整理して保存するための共通の書き方です。これを使えば、ゲームのセーブデータや設定情報を簡単に管理できますよ。」
生徒
「難しそうに見えますが、初心者でも扱えるようになりますか?」
先生
「もちろんです!C#には専用の便利な道具が用意されているので、基本さえ押さえればすぐに使いこなせます。一緒に見ていきましょう!」
1. JSONとXMLとは何か?データの保存形式を学ぼう
プログラミングの世界では、プログラムを終了してもデータを残しておくために、特定の形式でファイルに書き出す必要があります。その代表的な形式がJSON(ジェイソン)とXML(エックスエムエル)です。
JSONは、JavaScript Object Notationの略で、現在最も人気のあるデータ形式です。書き方がシンプルで、人間が見ても直感的に内容が理解しやすいのが特徴です。一方、XMLは、Extensible Markup Languageの略で、タグを使ってデータを囲む形式です。古くから多くのシステムで利用されており、構造が厳格で情報の整理に優れています。
例えば、RPGゲームのキャラクター情報を保存する場合、名前やレベル、体力をひとまとめにしてファイルに書き込む作業を「シリアル化(シリアライズ)」と呼び、逆にファイルからプログラムへ読み込む作業を「逆シリアル化(デシリアライズ)」と呼びます。この言葉は少し難しいですが、単純に「保存」と「読み込み」のことだと考えて問題ありません。
2. C#でJSONを扱うための準備とSystem.Text.Json
現代のC#開発において、JSONを扱うための標準的なライブラリ(便利な道具セット)は、マイクロソフトが提供しているSystem.Text.Jsonです。以前は外部のライブラリを追加する必要がありましたが、現在は標準機能として組み込まれているため、初心者でもすぐに使い始めることができます。
JSONを扱う第一歩は、保存したいデータの「形」を決めることです。C#では、これを「クラス」という設計図で作ります。例えば、名前と年齢を持つ「人間」というデータを作りたい場合、その器を用意する必要があります。この器に値を入れ、それをJSON形式の文字列に変換することで、ファイルとして保存できるようになります。
3. 実践!JSON形式でデータを保存してみよう
それでは、実際にC#でオブジェクトをJSON形式の文字列に変換するコードを見てみましょう。ここでは、ユーザー情報を保存するシミュレーションを行います。
using System;
using System.Text.Json;
public class User
{
public string Name { get; set; }
public int Level { get; set; }
}
class Program
{
static void Main()
{
// データの作成
User player = new User { Name = "たろう", Level = 15 };
// オブジェクトをJSON文字列に変換(シリアル化)
string jsonString = JsonSerializer.Serialize(player);
Console.WriteLine("JSONに変換した結果:");
Console.WriteLine(jsonString);
}
}
実行結果は以下のようになります。
JSONに変換した結果:
{"Name":"たろう","Level":15}
このように、JsonSerializer.Serializeという命令を使うだけで、複雑なデータも一行の文字列にまとめることができます。これがJSONの魔法です。
4. JSONファイルを読み込んでプログラムで使う方法
保存したJSONデータを、再びプログラムで使える形式に戻す作業が「逆シリアル化」です。インターネットから取得したデータや、設定ファイルから読み込んだデータを処理する際に必ず必要になる技術です。
逆シリアル化を行うときは、JsonSerializer.Deserializeという命令を使います。このとき、どのクラス(設計図)に当てはめるかを指定するのがポイントです。以下の例では、文字列として用意したJSONデータを、再びUserクラスのオブジェクトに戻しています。
using System;
using System.Text.Json;
public class User
{
public string Name { get; set; }
public int Level { get; set; }
}
class Program
{
static void Main()
{
// JSON形式の文字列(本来はファイルなどから読み込む)
string jsonInput = "{\"Name\":\"はなこ\",\"Level\":25}";
// JSON文字列をオブジェクトに戻す(逆シリアル化)
User loadedUser = JsonSerializer.Deserialize<User>(jsonInput);
Console.WriteLine("読み込んだデータ:");
Console.WriteLine($"名前: {loadedUser.Name}");
Console.WriteLine($"レベル: {loadedUser.Level}");
}
}
実行結果は以下の通りです。
読み込んだデータ:
名前: はなこ
レベル: 25
5. XMLとは?HTMLに似たタグ形式のデータ構造
次に、XMLについて解説します。XMLは、ウェブサイトを作るためのHTMLという言語にとてもよく似ています。<名前>たろう</名前>のように、開始タグと終了タグで値を挟んで表現します。
XMLの利点は、非常に古いシステムから最新のシステムまで幅広く対応していることや、データの親子関係が視覚的にわかりやすいことです。C#ではSystem.Xml.Serializationという機能を使って、JSONと同じようにデータの変換が可能です。タグの名前を自由に決められるため、独自の形式を作成するのに適しています。
6. C#でXMLを書き出す方法をマスターする
XML形式でデータを保存する場合のコードを確認しましょう。JSONとは少し書き方が異なりますが、基本的な考え方は同じです。まず、どのクラスをXMLに変換するかを宣言する「XmlSerializer」という道具を準備します。
using System;
using System.IO;
using System.Xml.Serialization;
public class Product
{
public string ItemName { get; set; }
public int Price { get; set; }
}
class Program
{
static void Main()
{
Product p = new Product { ItemName = "リンゴ", Price = 150 };
// XMLを扱うための準備
XmlSerializer serializer = new XmlSerializer(typeof(Product));
using (StringWriter writer = new StringWriter())
{
// オブジェクトをXMLに変換
serializer.Serialize(writer, p);
Console.WriteLine("XMLに変換した結果:");
Console.WriteLine(writer.ToString());
}
}
}
出力されるXMLの内容は、以下のようになります。HTMLのような形式でデータが保存されているのがわかりますね。
<?xml version="1.0" encoding="utf-16"?>
<Product xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ItemName>リンゴ</ItemName>
<Price>150</Price>
</Product>
7. JSONとXMLの使い分けはどうすればいい?
初心者の方が一番迷うのは、「どっちを使えばいいの?」という点でしょう。結論から言うと、現代のプログラミングでは、特別な理由がない限りJSONを使うのが一般的です。
JSONはXMLに比べて文字数が少なくなるため、通信速度が速くなります。また、書き方がシンプルなので、プログラムで扱う際の処理速度も速い傾向にあります。一方で、XMLは設定ファイルや、古い銀行システム、Microsoft Officeのドキュメント(.docxなど)の中身などで現在も活躍しています。どちらも扱えるようになっておくと、エンジニアとしての幅が広がります。
8. 実践的な活用例!リスト(配列)をまるごと保存する
これまでは単一のデータだけを扱ってきましたが、実際のアプリでは「複数のデータ」をまとめて保存したいことが多いはずです。例えば、買い物リストや複数の敵キャラクターの情報などです。C#のListという機能を使えば、複数のデータをまとめてJSONに変換することが可能です。
using System;
using System.Collections.Generic;
using System.Text.Json;
public class Todo
{
public string Task { get; set; }
public bool IsDone { get; set; }
}
class Program
{
static void Main()
{
// リストを作成してデータを追加
List<Todo> todoList = new List<Todo>
{
new Todo { Task = "買い物", IsDone = false },
new Todo { Task = "掃除", IsDone = true }
};
// リスト全体をJSONに変換
string jsonList = JsonSerializer.Serialize(todoList);
Console.WriteLine("リストをJSONにした結果:");
Console.WriteLine(jsonList);
}
}
実行結果は以下のようになります。データの塊が[](角括弧)で囲まれているのが特徴です。
リストをJSONにした結果:
[{"Task":"買い物","IsDone":false},{"Task":"掃除","IsDone":true}]
9. ファイルの読み書きも一緒に覚えよう
ここまでの説明では、画面(コンソール)に表示するだけでしたが、本当の目的はファイルとして保存することです。C#にはSystem.IO.Fileという便利な道具があります。これを使えば、作成したJSON文字列をたった一行でパソコンの保存場所に書き込むことができます。
例えば、File.WriteAllText("data.json", jsonString);と書くだけで、あなたのパソコンに「data.json」という名前のファイルが作成されます。読み込むときは、逆にFile.ReadAllText("data.json");を使えば、ファイルの中身を文字列として取り出せます。このように、「シリアル化」と「ファイルの書き込み」を組み合わせることで、一人前のアプリ開発に一歩近づくことができます。
10. エラーを防ぐための注意点とヒント
JSONやXMLを扱うときに初心者がつまずきやすいポイントがいくつかあります。まず一つ目は、クラスのプロパティ(データの項目)にpublicを付け忘れることです。これがないと、外部の道具(シリアライザー)がデータを読み取ることができず、空っぽのファイルが出来上がってしまいます。
二つ目は、データの形式を合わせることです。JSONで数値として保存されている項目を、プログラム側で文字として読み込もうとするとエラーが発生します。データの形は正確に設計図(クラス)に反映させることが大切です。最初は難しく感じるかもしれませんが、エラーが出るたびに修正していくことで、データの構造を理解する力が養われます。プログラミングは失敗の積み重ねですので、どんどんチャレンジしてみましょう!