MENU

C# オブジェクトを XML にシリアル化する

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; }
}

このコードでは、以下のような重要なポイントがあります:

  1. Personクラスを定義し、シリアル化したいプロパティを公開しています。
  2. XmlSerializerクラスのインスタンスを作成し、シリアル化対象の型(この場合はPerson)を指定します。
  3. StringWriterを使用して、シリアル化されたXMLを文字列として取得しています。
  4. 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の出力をカスタマイズしています:

  1. [XmlRoot]属性:ルート要素の名前を指定します。
  2. [XmlAttribute]属性:プロパティをXML属性としてシリアル化します。
  3. [XmlElement]属性:要素名を変更します。
  4. [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にシリアル化する方法には、主に以下のポイントがあります:

  1. XmlSerializerクラスを使用して簡単にシリアル化できる。
  2. 属性を使用してXML出力をカスタマイズできる。
  3. メモリ上の文字列やファイルなど、様々な出力先にシリアル化可能。

XMLシリアル化は、データの保存や転送、設定ファイルの作成など、多くのシナリオで役立ちます。この技術を習得することで、より柔軟なデータ処理が可能になります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次