英語で読む

次の方法で共有


IXmlSerializable インターフェイス

定義

XML シリアル化および逆シリアル化のカスタム書式を提供します。

C#
public interface IXmlSerializable
派生

次のコード例は、プライベート フィールドを IXmlSerializable シリアル化する インターフェイスの実装を示しています。

C#
using System;
using System.Xml;
using System.Xml.Schema;
using System.Xml.Serialization;

public class Person : IXmlSerializable
{

    // Private state

    private string personName;

    // Constructors

    public Person (string name)
    {
        personName = name;
    }

    public Person ()
    {
        personName = null;
    }

    // Xml Serialization Infrastructure

    public void WriteXml (XmlWriter writer)
    {
        writer.WriteString(personName);
    }

    public void ReadXml (XmlReader reader)
    {
        personName = reader.ReadString();
    }

    public XmlSchema GetSchema()
    {
        return(null);
    }

    // Print

    public override string ToString()
    {
        return(personName);
    }
}

注釈

このインターフェイスを実装するには、2 つの理由があります。 1 つ目は、 によってオブジェクトをシリアル化または逆シリアル化する方法を XmlSerializer制御することです。 たとえば、大きなデータ セットをバッファリングする代わりにデータをバイトにチャンクし、Base64 エンコードを使用してデータがエンコードされるときに発生するインフレを回避することもできます。 シリアル化を制御するには、 メソッドと WriteXml メソッドをReadXml実装して、XML のXmlReader読み取りと書き込みに使用される クラスと XmlWriter クラスを制御します。 この例については、「 方法: シリアル化されたデータをチャンクする」を参照してください。

2 つ目の理由は、スキーマを制御できることです。 これを有効にするには、 をシリアル化可能な型に適用 XmlSchemaProviderAttribute し、スキーマを返す静的メンバーの名前を指定する必要があります。 例については、「XmlSchemaProviderAttribute」をご覧ください。

インターフェイスを実装するクラスには、パラメーターなしのコンストラクターが必要です。 これは クラスの XmlSerializer 要件です。

メソッド

GetSchema()

このメソッドは予約されているため、使用できません。 IXmlSerializable インターフェイスを実装する場合、このメソッドから null (Visual Basic では Nothing) を返す必要があります。また、カスタム スキーマの指定が要求されている場合は、このクラスに XmlSchemaProviderAttribute を適用します。

ReadXml(XmlReader)

XML 表現からオブジェクトを生成します。

WriteXml(XmlWriter)

オブジェクトを XML 表現に変換します。

適用対象

製品 バージョン
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

こちらもご覧ください