Двоичная сериализацияBinary serialization

Сериализацию можно представить как процесс сохранения состояния объекта в среду хранения.Serialization can be defined as the process of storing the state of an object to a storage medium. Во время этого процесса открытые и закрытые поля объекта и имя класса, включая сборку с классом, преобразуются в поток байтов, который затем записывается в поток данных.During this process, the public and private fields of the object and the name of the class, including the assembly containing the class, are converted to a stream of bytes, which is then written to a data stream. После десериализации объекта создается точная копия исходного объекта.When the object is subsequently deserialized, an exact clone of the original object is created.

При реализации механизма сериализации в объектно-ориентированной среде следует сделать выбор между простотой и гибкостью использования.When implementing a serialization mechanism in an object-oriented environment, you have to make a number of tradeoffs between ease of use and flexibility. Процесс можно в значительной степени автоматизировать при условии сохранения над ним достаточного контроля.The process can be automated to a large extent, provided you are given sufficient control over the process. Например, могут возникать ситуации, при которых недостаточно простой двоичной сериализации или по какой-либо причине необходимо определить сериализуемые поля в классе.For example, situations may arise where simple binary serialization is not sufficient, or there might be a specific reason to decide which fields in a class need to be serialized. В следующих разделах исследуется надежный механизм сериализации с использованием платформы .NET и отмечается ряд важных особенностей, которые позволяют настраивать процесс в соответствии с собственными потребностями.The following sections examine the robust serialization mechanism provided with .NET and highlight a number of important features that allow you to customize the process to meet your needs.

Примечание

Состояние объекта, закодированного в UTF-8 или UTF-7, не сохраняется, если этот объект сериализуется и десериализуется с использованием различных версий .NET Framework.The state of a UTF-8 or UTF-7 encoded object is not preserved if the object is serialized and deserialized using different .NET Framework versions.

Предупреждение

Двоичная сериализация может быть опасной.Binary serialization can be dangerous. Никогда не выполняйте десериализацию данных из ненадежного источника и не пересылайте сериализируемые данные круговым путем через системы, которыми вы не управляете.Never deserialize data from an untrusted source and never round-trip serialized data to systems not under your control.

По своей природе двоичная сериализация позволяет изменять частные члены внутри объекта и таким образом изменять его состояние. В связи с этим рекомендуется использовать другие платформы сериализации, например JSON.NET, которые работают на поверхности открытого API.As the nature of binary serialization allows the modification of private members inside an object and therefore changing the state of it, other serialization frameworks like JSON.NET which operate on the public API surface are recommended.

Двоичная сериализация в .NET CoreBinary serialization in .NET Core

.NET Core поддерживает двоичную сериализацию с подмножеством типов..NET Core supports binary serialization with a subset of types. Список поддерживаемых типов представлен в этом разделе.You can see the list of supported types in the Serializable types section. Благодаря определенному набору типов гарантируется возможность сериализации между платформой .NET Framework версии 4.5.1 или более поздней и .NET Core 2.0 и более поздних версий.The defined set of types are guaranteed to be serializable between .NET Framework 4.5.1 and later versions and .NET Core 2.0 and later versions. Другие реализации .NET (например Mono) официально не поддерживаются, но также должны работать.Other .NET implementations, such as Mono, aren't officially supported but should also be working.

Сериализуемые типыSerializable types

Содержание разделаIn this section

СсылкаReference

  • System.Runtime.Serialization
    Содержит классы, которые можно использовать для сериализации и десериализации объектов.Contains classes that can be used for serializing and deserializing objects.