ISerializable Интерфейс

Определение

Позволяет объекту управлять собственной сериализацией и десериализацией с помощью двоичной и XML-сериализации.

public interface class ISerializable
public interface ISerializable
[System.Runtime.InteropServices.ComVisible(true)]
public interface ISerializable
type ISerializable = interface
[<System.Runtime.InteropServices.ComVisible(true)>]
type ISerializable = interface
Public Interface ISerializable
Производный
Атрибуты

Комментарии

Любой класс, который может быть сериализован с помощью двоичной или XML-сериализации, должен быть помечен с помощью .SerializableAttribute Если классу необходимо управлять процессом двоичной или XML-сериализации, он может реализовать ISerializable интерфейс. Formatter Вызывает GetObjectData время сериализации и заполняет предоставленные SerializationInfo все данные, необходимые для представления объекта. Formatter Создает SerializationInfo объект с типом объекта в графе. Объекты, которые должны отправлять прокси-серверы для себя, могут использовать FullTypeName и AssemblyName методы SerializationInfo для изменения передаваемых сведений.

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

Интерфейс ISerializable подразумевает конструктор с сигнатурой constructor (SerializationInfo information, StreamingContext context). Во время десериализации текущий конструктор вызывается только после десериализации данных в SerializationInfo методе форматирования. Как правило, этот конструктор должен быть protected , если класс не sealedявляется.

Порядок десериализации объектов не может быть гарантирован. Например, если один тип ссылается на тип, который еще не десериализирован, возникнет исключение. При создании типов с такими зависимостями можно обойти проблему, реализуя IDeserializationCallback интерфейс и OnDeserialization метод.

Архитектура сериализации обрабатывает типы объектов, расширяющие те же типы, что MarshalByRefObject и типы, расширяющие Object. Эти типы можно пометить и SerializableAttribute реализовать ISerializable интерфейс как любой другой тип объекта. Их состояние объекта будет записано и сохранено в потоке.

При использовании System.Runtime.Remotingэтих типов инфраструктура удаленного взаимодействия обеспечивает суррогат, который преумножет типичную сериализацию и вместо этого сериализует прокси-сервер в .MarshalByRefObject Суррогат — это вспомогательный элемент, который знает, как сериализовать и десериализировать объекты определенного типа. Прокси-сервер, невидимый пользователю в большинстве случаев, будет типом ObjRef.

Как общий шаблон конструктора, класс будет необычным для класса, который будет помечен как с помощью сериализуемого атрибута, так и расширения MarshalByRefObject. Разработчики должны тщательно думать о возможных сценариях сериализации и удаленного взаимодействия при сочетании этих двух характеристик. Один из примеров, где это может быть применимо, имеет значение MemoryStream. Хотя базовый класс MemoryStream (Stream) расширяется, MarshalByRefObjectможно записать состояние MemoryStream и восстановить его в ней. Поэтому это может быть значимым, чтобы сериализовать состояние этого потока в базу данных и восстановить его в какой-то момент времени. Однако при использовании с помощью удаленного взаимодействия объект этого типа будет прокси-сервер.

Дополнительные сведения о сериализации классов, расширяющихся MarshalByRefObject, см. в статье RemotingSurrogateSelector. Дополнительные сведения о реализации ISerializableсм. в разделе "Настраиваемая сериализация".

Note

Этот интерфейс не применяется к сериализации JSON с помощью System.Text.Json.

Примечания для тех, кто реализует этот метод

Реализуйте этот интерфейс, чтобы разрешить объекту принимать участие в собственной сериализации и десериализации.

Методы

Имя Описание
GetObjectData(SerializationInfo, StreamingContext)
Устаревшие..

Заполняет SerializationInfo данные, необходимые для сериализации целевого объекта.

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

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