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() |
Данный метод зарезервирован и не используется. При реализации интерфейса |
ReadXml(XmlReader) |
Создает объект на основе его XML-представления. |
WriteXml(XmlWriter) |
Преобразует объект в его XML-представление. |