C#プログラミングにおいて、オブジェクトをXML形式で保存または転送する必要が生じることがあります。このプロセスは「XMLシリアル化」と呼ばれ、データの永続化やシステム間の通信に広く使用されています。この記事では、C#でオブジェクトをXMLにシリアル化する方法を、初心者にも分かりやすく解説します。
目次
XMLシリアル化の基本
C#では、System.Xml.Serialization
名前空間にあるXmlSerializer
クラスを使用して、オブジェクトを簡単にXMLにシリアル化できます。以下に、基本的な使用例を示します。
using System;
using System.Xml.Serialization;
using System.IO;
public class Program
{
public static void Main()
{
// シリアル化するオブジェクトを作成
Person person = new Person
{
Name = "山田太郎",
Age = 30,
Email = "yamada@example.com"
};
// XmlSerializerオブジェクトを作成
XmlSerializer serializer = new XmlSerializer(typeof(Person));
// XMLにシリアル化
using (StringWriter writer = new StringWriter())
{
serializer.Serialize(writer, person);
string xml = writer.ToString();
Console.WriteLine(xml);
}
}
}
// シリアル化対象のクラス
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string Email { get; set; }
}
このコードでは、以下のような重要なポイントがあります:
Person
クラスを定義し、シリアル化したいプロパティを公開しています。XmlSerializer
クラスのインスタンスを作成し、シリアル化対象の型(この場合はPerson
)を指定します。StringWriter
を使用して、シリアル化されたXMLを文字列として取得しています。serializer.Serialize
メソッドを呼び出して、実際のシリアル化を行います。
XMLシリアル化のカスタマイズ
XMLシリアル化の出力をカスタマイズしたい場合、属性を使用して制御できます。以下に例を示します。
using System;
using System.Xml.Serialization;
using System.IO;
public class Program
{
public static void Main()
{
Employee employee = new Employee
{
Id = 1001,
Name = "鈴木花子",
Department = "営業部",
JoinDate = new DateTime(2020, 4, 1)
};
XmlSerializer serializer = new XmlSerializer(typeof(Employee));
using (StringWriter writer = new StringWriter())
{
serializer.Serialize(writer, employee);
string xml = writer.ToString();
Console.WriteLine(xml);
}
}
}
[XmlRoot("EmployeeInfo")]
public class Employee
{
[XmlAttribute("EmployeeId")]
public int Id { get; set; }
[XmlElement("FullName")]
public string Name { get; set; }
public string Department { get; set; }
[XmlElement("StartDate")]
public DateTime JoinDate { get; set; }
[XmlIgnore]
public string InternalNote { get; set; }
}
このコードでは、以下のような属性を使用してXMLの出力をカスタマイズしています:
[XmlRoot]
属性:ルート要素の名前を指定します。[XmlAttribute]
属性:プロパティをXML属性としてシリアル化します。[XmlElement]
属性:要素名を変更します。[XmlIgnore]
属性:プロパティをシリアル化から除外します。
ファイルへのシリアル化
オブジェクトを直接XMLファイルにシリアル化することも可能です。以下に例を示します。
using System;
using System.Xml.Serialization;
using System.IO;
public class Program
{
public static void Main()
{
Product product = new Product
{
Code = "A001",
Name = "高性能ノートPC",
Price = 150000
};
XmlSerializer serializer = new XmlSerializer(typeof(Product));
// ファイルにシリアル化
using (FileStream file = File.Create("product.xml"))
{
serializer.Serialize(file, product);
}
Console.WriteLine("XMLファイルが作成されました: product.xml");
}
}
public class Product
{
public string Code { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}
このコードでは、FileStream
を使用してオブジェクトを直接XMLファイルにシリアル化しています。
まとめ
C#でオブジェクトをXMLにシリアル化する方法には、主に以下のポイントがあります:
XmlSerializer
クラスを使用して簡単にシリアル化できる。- 属性を使用してXML出力をカスタマイズできる。
- メモリ上の文字列やファイルなど、様々な出力先にシリアル化可能。
XMLシリアル化は、データの保存や転送、設定ファイルの作成など、多くのシナリオで役立ちます。この技術を習得することで、より柔軟なデータ処理が可能になります。
コメント