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 данные, необходимые для сериализации целевого объекта. |