バイナリ シリアル化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.

注意

オブジェクトのシリアル化と逆シリアル化を行う際に使用した .NET Framework のバージョンが異なる場合、UTF-8 または UTF-7 でエンコードされたオブジェクトの状態は保持されません。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.

バイナリ シリアル化の性質上、オブジェクト内でのプライベート メンバーの変更が可能であり、その状態が変化するため、パブリック API サーフェイスで動作する JSON.NET のような他のシリアル化フレームワークを使用することをお勧めします。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 Core でのバイナリ シリアル化Binary 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. Mono などの他の .NET 実装は公式にサポートされておらず、また機能もしません。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.