IXmlSerializable インターフェイス

定義

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

public interface class IXmlSerializable
public interface IXmlSerializable
type IXmlSerializable = interface
Public Interface IXmlSerializable
派生

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

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 エンコードを使用してデータがエンコードされるときに発生する増加を回避できます。 シリアル化を制御するには、XML の読み取りと書き込みに使用するXmlReaderクラスとXmlWriter クラスを制御するReadXmlメソッドとWriteXml メソッドを実装します。 この例については、「 方法: シリアル化されたデータをチャンクする」を参照してください。

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

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

メソッド

名前 説明
GetSchema()

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

ReadXml(XmlReader)

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

WriteXml(XmlWriter)

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

適用対象

こちらもご覧ください