Поделиться через


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 методы и WriteXml для управления классами XmlReader и , XmlWriter используемыми для чтения и записи XML. Пример см. в разделе Практическое руководство. Фрагментирование сериализованных данных.

Вторая причина заключается в том, чтобы иметь возможность управлять схемой. Чтобы включить это, необходимо применить XmlSchemaProviderAttribute к сериализуемому типу и указать имя статического члена, возвращающего схему. Пример см. в разделе XmlSchemaProviderAttribute.

Класс, реализующий интерфейс, должен иметь конструктор без параметров. Это требование XmlSerializer класса .

Методы

GetSchema()

Данный метод зарезервирован и не используется. При реализации интерфейса IXmlSerializable вы должны возвращать null (Nothing в Visual Basic) из этого метода, и если требуется указание пользовательской схемы, применить к классу XmlSchemaProviderAttribute.

ReadXml(XmlReader)

Создает объект на основе его XML-представления.

WriteXml(XmlWriter)

Преобразует объект в его XML-представление.

Применяется к

См. также раздел