IXmlSerializable 接口

定义

为 XML 序列化和反序列化提供自定义格式。

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

示例

以下示例代码演示序列化私有字段的 IXmlSerializable 接口的实现。

#using <System.Xml.dll>

using namespace System;
using namespace System::Xml;
using namespace System::Xml::Schema;
using namespace System::Xml::Serialization;
public ref class Person: public IXmlSerializable
{
private:

   // Private state
   String^ personName;

public:

   // Constructors
   Person( String^ name )
   {
      personName = name;
   }

   Person()
   {
      personName = nullptr;
   }

   // Xml Serialization Infrastructure
   virtual void WriteXml( XmlWriter^ writer )
   {
      writer->WriteString( personName );
   }

   virtual void ReadXml( XmlReader^ reader )
   {
      personName = reader->ReadString();
   }

   virtual XmlSchema^ GetSchema()
   {
      return nullptr;
   }

   // Print
   virtual String^ ToString() override
   {
      return (personName);
   }
};
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);
    }
}

注解

实现此接口有两个原因。 第一种是控制 对象的序列化或反序列化 XmlSerializer方式。 例如,可以将数据分块成字节而不是缓冲大型数据集,还可以避免使用 Base64 编码对数据进行编码时发生的膨胀。 若要控制序列化,请实现 ReadXml 和 方法来控制XmlReader用于读取和写入 XML 的 和 XmlWriterWriteXml 类。 有关此示例,请参阅 如何:对序列化的数据进行区块

第二个原因是能够控制架构。 若要启用此功能,必须将 应用于 XmlSchemaProviderAttribute 可序列化类型,并指定返回架构的静态成员的名称。 有关示例,请参见XmlSchemaProviderAttribute

实现 接口的类必须具有无参数构造函数。 这是 类的要求 XmlSerializer

方法

GetSchema()

此方法是保留方法,请不要使用。 在实现 IXmlSerializable 接口时,应从此方法返回 null(在 Visual Basic 中为 Nothing),如果需要指定自定义架构,应向该类应用 XmlSchemaProviderAttribute

ReadXml(XmlReader)

从其 XML 表示形式生成对象。

WriteXml(XmlWriter)

将对象转换为其 XML 表示形式。

适用于

另请参阅