はじめに
C#には、オブジェクトのデータを永続化するための「シリアル化」と呼ばれる便利な機能があります。シリアル化を活用すれば、オブジェクトをファイルに保存したり、ネットワークを通じて送信したりすることが可能です。また、保存したファイルを後で復元(デシリアル化)して使用することもできます。本記事では、C#におけるシリアル化とファイル保存の仕組みを分かりやすく解説します。
シリアル化とは?
シリアル化とは、オブジェクトの状態をストリーム(連続したデータ)に変換し、そのデータを保存または通信で使用できる形にすることです。逆に、ストリームをオブジェクトの状態に戻す処理をデシリアル化と呼びます。シリアル化は、データの永続化、リモート通信、ファイル保存など多くの用途で利用されます。
C#でのシリアル化の種類
C#では、いくつかの方法でシリアル化を実現できます。代表的なシリアル化方式は以下の通りです。
- バイナリシリアル化: オブジェクトをバイナリ形式に変換。高速で効率的。
- XMLシリアル化: オブジェクトをXML形式でシリアル化。人間が読みやすい形式。
- JSONシリアル化: オブジェクトをJSON形式でシリアル化。WebサービスやAPIで広く利用される形式。
次に、それぞれのシリアル化方法とファイル保存の具体的なコード例を見ていきましょう。
バイナリシリアル化とファイル保存
バイナリシリアル化では、オブジェクトをバイナリ形式で保存します。これにより、高速で効率的な保存が可能ですが、保存されたファイルは人間が読むことはできません。
まず、バイナリシリアル化を行うクラスには、[Serializable]
属性を付ける必要があります。
バイナリシリアル化のサンプルコード:
using System; using System.IO; using System.Runtime.Serialization.Formatters.Binary; [Serializable] public class Person { public string Name { get; set; } public int Age { get; set; } } class Program { static void Main(string[] args) { // シリアル化するオブジェクト Person person = new Person { Name = "Taro", Age = 30 }; // バイナリシリアル化 BinaryFormatter formatter = new BinaryFormatter(); using (FileStream stream = new FileStream("person.dat", FileMode.Create)) { formatter.Serialize(stream, person); } Console.WriteLine("バイナリシリアル化が完了しました。"); // デシリアル化 using (FileStream stream = new FileStream("person.dat", FileMode.Open)) { Person deserializedPerson = (Person)formatter.Deserialize(stream); Console.WriteLine($"デシリアル化されたオブジェクト: {deserializedPerson.Name}, {deserializedPerson.Age}"); } } }
解説:
BinaryFormatter
を使用して、Person
クラスのインスタンスをバイナリ形式でシリアル化・デシリアル化しています。- シリアル化されたデータは
person.dat
というファイルに保存され、後でデシリアル化して再利用できます。
XMLシリアル化とファイル保存
XMLシリアル化では、オブジェクトをXML形式で保存します。人間が読みやすい形式で、ファイルを直接編集することも可能です。
XMLシリアル化のサンプルコード:
using System; using System.IO; using System.Xml.Serialization; public class Person { public string Name { get; set; } public int Age { get; set; } } class Program { static void Main(string[] args) { // シリアル化するオブジェクト Person person = new Person { Name = "Taro", Age = 30 }; // XMLシリアル化 XmlSerializer serializer = new XmlSerializer(typeof(Person)); using (FileStream stream = new FileStream("person.xml", FileMode.Create)) { serializer.Serialize(stream, person); } Console.WriteLine("XMLシリアル化が完了しました。"); // デシリアル化 using (FileStream stream = new FileStream("person.xml", FileMode.Open)) { Person deserializedPerson = (Person)serializer.Deserialize(stream); Console.WriteLine($"デシリアル化されたオブジェクト: {deserializedPerson.Name}, {deserializedPerson.Age}"); } } }
JSONシリアル化とファイル保存
JSONシリアル化は、特にWebアプリケーションやAPI通信でよく使われる形式です。軽量で、データの可読性が高いのが特徴です。C#では、System.Text.Json
またはNewtonsoft.Json
(外部ライブラリ)を使ってJSONシリアル化を行います。
JSONシリアル化のサンプルコード(System.Text.Json
使用):
using System; using System.IO; using System.Text.Json; public class Person { public string Name { get; set; } public int Age { get; set; } } class Program { static void Main(string[] args) { // シリアル化するオブジェクト Person person = new Person { Name = "Taro", Age = 30 }; // JSONシリアル化 string jsonString = JsonSerializer.Serialize(person); File.WriteAllText("person.json", jsonString); Console.WriteLine("JSONシリアル化が完了しました。"); // デシリアル化 string readJson = File.ReadAllText("person.json"); Person deserializedPerson = JsonSerializer.Deserialize(readJson); Console.WriteLine($"デシリアル化されたオブジェクト: {deserializedPerson.Name}, {deserializedPerson.Age}"); } }
解説:
JsonSerializer
を使用して、オブジェクトをJSON形式でシリアル化・デシリアル化します。- JSONファイルは非常に軽量で、Web APIなどとのデータ交換に最適です。
まとめ
シリアル化は、データの永続化やネットワーク通信に不可欠な技術です。C#では、バイナリ、XML、JSONといったさまざまな形式でシリアル化が可能であり、用途に応じて使い分けることができます。
- バイナリシリアル化: 高速で効率的だが、人間には読めない形式。
- XMLシリアル化: 人間が読める形式であり、ファイルの編集が可能。
- JSONシリアル化: 軽量で、WebアプリケーションやAPIでよく使われる形式。
プロジェクトのニーズに合わせて、最適なシリアル化方式を選びましょう。
コメント