BinaryFormatter BinaryFormatter BinaryFormatter BinaryFormatter Class

定義

オブジェクト、または接続されているオブジェクトのグラフ全体を、バイナリ形式でシリアル化および逆シリアル化します。 Serializes and deserializes an object, or an entire graph of connected objects, in binary format.

public ref class BinaryFormatter sealed : System::Runtime::Remoting::Messaging::IRemotingFormatter
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class BinaryFormatter : System.Runtime.Remoting.Messaging.IRemotingFormatter
type BinaryFormatter = class
    interface IRemotingFormatter
    interface IFormatter
Public NotInheritable Class BinaryFormatter
Implements IRemotingFormatter
継承
BinaryFormatterBinaryFormatterBinaryFormatterBinaryFormatter
属性
実装

using namespace System;
using namespace System::IO;
using namespace System::Collections;
using namespace System::Runtime::Serialization::Formatters::Binary;
using namespace System::Runtime::Serialization;
ref class App
{
public:
   static void Serialize()
   {
      
      // Create a hashtable of values that will eventually be serialized.
      Hashtable^ addresses = gcnew Hashtable;
      addresses->Add( "Jeff", "123 Main Street, Redmond, WA 98052" );
      addresses->Add( "Fred", "987 Pine Road, Phila., PA 19116" );
      addresses->Add( "Mary", "PO Box 112233, Palo Alto, CA 94301" );
      
      // To serialize the hashtable (and its keys/values),  
      // you must first open a stream for writing. 
      // In this case we will use a file stream.
      FileStream^ fs = gcnew FileStream( "DataFile.dat",FileMode::Create );
      
      // Construct a BinaryFormatter and use it to serialize the data to the stream.
      BinaryFormatter^ formatter = gcnew BinaryFormatter;
      try
      {
         formatter->Serialize( fs, addresses );
      }
      catch ( SerializationException^ e ) 
      {
         Console::WriteLine( "Failed to serialize. Reason: {0}", e->Message );
         throw;
      }
      finally
      {
         fs->Close();
      }

   }

   static void Deserialize()
   {
      
      // Declare the hashtable reference.
      Hashtable^ addresses = nullptr;
      
      // Open the file containing the data that we want to deserialize.
      FileStream^ fs = gcnew FileStream( "DataFile.dat",FileMode::Open );
      try
      {
         BinaryFormatter^ formatter = gcnew BinaryFormatter;
         
         // Deserialize the hashtable from the file and 
         // assign the reference to our local variable.
         addresses = dynamic_cast<Hashtable^>(formatter->Deserialize( fs ));
      }
      catch ( SerializationException^ e ) 
      {
         Console::WriteLine( "Failed to deserialize. Reason: {0}", e->Message );
         throw;
      }
      finally
      {
         fs->Close();
      }

      
      // To prove that the table deserialized correctly, display the keys/values.
      IEnumerator^ myEnum = addresses->GetEnumerator();
      while ( myEnum->MoveNext() )
      {
         DictionaryEntry ^ de = safe_cast<DictionaryEntry ^>(myEnum->Current);
         Console::WriteLine( " {0} lives at {1}.", de->Key, de->Value );
      }
   }

};


[STAThread]
int main()
{
   App::Serialize();
   App::Deserialize();
   return 0;
}

using System;
using System.IO;
using System.Collections;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;

public class App 
{
    [STAThread]
    static void Main() 
    {
        Serialize();
        Deserialize();
    }

    static void Serialize() 
    {
        // Create a hashtable of values that will eventually be serialized.
        Hashtable addresses = new Hashtable();
        addresses.Add("Jeff", "123 Main Street, Redmond, WA 98052");
        addresses.Add("Fred", "987 Pine Road, Phila., PA 19116");
        addresses.Add("Mary", "PO Box 112233, Palo Alto, CA 94301");

        // To serialize the hashtable and its key/value pairs,  
        // you must first open a stream for writing. 
        // In this case, use a file stream.
        FileStream fs = new FileStream("DataFile.dat", FileMode.Create);

        // Construct a BinaryFormatter and use it to serialize the data to the stream.
        BinaryFormatter formatter = new BinaryFormatter();
        try 
        {
            formatter.Serialize(fs, addresses);
        }
        catch (SerializationException e) 
        {
            Console.WriteLine("Failed to serialize. Reason: " + e.Message);
            throw;
        }
        finally 
        {
            fs.Close();
        }
    }

   
    static void Deserialize() 
    {
        // Declare the hashtable reference.
        Hashtable addresses  = null;

        // Open the file containing the data that you want to deserialize.
        FileStream fs = new FileStream("DataFile.dat", FileMode.Open);
        try 
        {
            BinaryFormatter formatter = new BinaryFormatter();

            // Deserialize the hashtable from the file and 
            // assign the reference to the local variable.
            addresses = (Hashtable) formatter.Deserialize(fs);
        }
        catch (SerializationException e) 
        {
            Console.WriteLine("Failed to deserialize. Reason: " + e.Message);
            throw;
        }
        finally 
        {
            fs.Close();
        }

        // To prove that the table deserialized correctly, 
        // display the key/value pairs.
        foreach (DictionaryEntry de in addresses) 
        {
            Console.WriteLine("{0} lives at {1}.", de.Key, de.Value);
        }
    }
}
Imports System.IO
Imports System.Collections
Imports System.Runtime.Serialization.Formatters.Binary
Imports System.Runtime.Serialization


Module App

    Sub Main()
        Serialize()
        Deserialize()
    End Sub

    Sub Serialize()

        ' Create a hashtable of values that will eventually be serialized.
        Dim addresses As New Hashtable
        addresses.Add("Jeff", "123 Main Street, Redmond, WA 98052")
        addresses.Add("Fred", "987 Pine Road, Phila., PA 19116")
        addresses.Add("Mary", "PO Box 112233, Palo Alto, CA 94301")

        ' To serialize the hashtable (and its key/value pairs),  
        ' you must first open a stream for writing. 
        ' In this case, use a file stream.
        Dim fs As New FileStream("DataFile.dat", FileMode.Create)

        ' Construct a BinaryFormatter and use it to serialize the data to the stream.
        Dim formatter As New BinaryFormatter
        Try
            formatter.Serialize(fs, addresses)
        Catch e As SerializationException
            Console.WriteLine("Failed to serialize. Reason: " & e.Message)
            Throw
        Finally
            fs.Close()
        End Try
    End Sub



    Sub Deserialize()
        ' Declare the hashtable reference.
        Dim addresses As Hashtable = Nothing

        ' Open the file containing the data that you want to deserialize.
        Dim fs As New FileStream("DataFile.dat", FileMode.Open)
        Try
            Dim formatter As New BinaryFormatter

            ' Deserialize the hashtable from the file and 
            ' assign the reference to the local variable.
            addresses = DirectCast(formatter.Deserialize(fs), Hashtable)
        Catch e As SerializationException
            Console.WriteLine("Failed to deserialize. Reason: " & e.Message)
            Throw
        Finally
            fs.Close()
        End Try

        ' To prove that the table deserialized correctly, 
        ' display the key/value pairs.
        Dim de As DictionaryEntry
        For Each de In addresses
            Console.WriteLine("{0} lives at {1}.", de.Key, de.Value)
        Next
    End Sub
End Module

注釈

SoapFormatterBinaryFormatterクラスの実装、IRemotingFormatterリモート プロシージャ コール (Rpc) をサポートするインターフェイスとIFormatterインターフェイス (によって継承、 IRemotingFormatter) オブジェクトのグラフのシリアル化をサポートするためにします。The SoapFormatter and BinaryFormatter classes implement the IRemotingFormatter interface to support remote procedure calls (RPCs), and the IFormatter interface (inherited by the IRemotingFormatter) to support serialization of a graph of objects. SoapFormatterクラスは、Rpc もサポートしています。ISoapMessageを使用せず、オブジェクト、IRemotingFormatter機能します。The SoapFormatter class also supports RPCs with ISoapMessage objects, without using the IRemotingFormatter functionality.

Rpc、中に、IRemotingFormatterインターフェイスにより、2 つの個別のオブジェクト グラフの指定: シリアル化するオブジェクトのグラフと (リモート関数呼び出しに関する情報を伝達するヘッダーのオブジェクトの配列を含むその他のグラフ例、トランザクション ID またはメソッド シグネチャ)。During RPCs, the IRemotingFormatter interface allows the specification of two separate object graphs: the graph of objects to serialize, and an additional graph that contains an array of header objects that convey information about the remote function call (for example, transaction ID or a method signature).

使用して、Rpc、 BinaryFormatter 2 つの部分に個別: メソッドの呼び出しは、呼び出されたメソッドを格納しているリモート オブジェクトをサーバーに送信、およびメソッドの応答は、ステータスをクライアントに、サーバーから送信されたと応答呼び出されたメソッドからの情報。RPCs that use the BinaryFormatter separate into two distinct parts: method calls, which are sent to the server with the remote object that contains the method called, and method responses, which are sent from the server to the client with the status and response information from the called method.

メソッド呼び出しのシリアル化中に、オブジェクト グラフの最初のオブジェクトをサポートする必要があります、IMethodCallMessageインターフェイス。During serialization of a method call the first object of the object graph must support the IMethodCallMessage interface. メソッドの呼び出しをシリアル化を使用して、DeserializeメソッドをHeaderHandlerパラメーター。To deserialize a method call, use the Deserialize method with the HeaderHandler parameter. リモート処理インフラストラクチャを使用して、HeaderHandlerデリゲートをサポートするオブジェクトを生成するために、ISerializableインターフェイス。The remoting infrastructure uses the HeaderHandler delegate to produce an object that supports the ISerializable interface. ときに、BinaryFormatter呼び出す、HeaderHandlerデリゲートが呼び出されるメソッドを使用してリモート オブジェクトの URI を返します、します。When the BinaryFormatter invokes the HeaderHandler delegate, it returns the URI of the remote object with the method that is being called. グラフの最初のオブジェクトに返されるサポート、IMethodCallMessageインターフェイス。The first object in the graph returned supports the IMethodCallMessage interface.

メソッドの応答をシリアル化の手順は、メソッド呼び出しの場合と同じ、オブジェクトの最初のオブジェクトを除くグラフをサポートする必要があります、IMethodReturnMessageインターフェイス。The serialization procedure for a method response is identical to that of a method call, except the first object of the object graph must support the IMethodReturnMessage interface. メソッドの応答を逆シリアル化を使用して、DeserializeMethodResponseメソッド。To deserialize a method response, use the DeserializeMethodResponse method. 時間を節約するには、呼び出し元のオブジェクトに関する詳細情報は送信されませんリモート オブジェクトに対するメソッド呼び出し時に。To save time, details about the caller object are not sent to the remote object during the method call. これらの詳細は、代わりに渡される元のメソッド呼び出しから取得、DeserializeMethodResponseメソッドで、IMethodCallMessageパラメーター。These details are instead obtained from the original method call, which is passed to the DeserializeMethodResponse method in the IMethodCallMessage parameter. によって返されるグラフの最初のオブジェクト、DeserializeMethodResponseメソッドのサポート、IMethodReturnMessageインターフェイス。The first object in the graph returned by the DeserializeMethodResponse method supports the IMethodReturnMessage interface.

重要

バイナリ シリアル化を使用して信頼できないデータを逆シリアル化すると、セキュリティ リスクにつながります。Using binary serialization to deserialize untrusted data can lead to security risks. 詳細については、次を参照してください。データ検証です。For more information, see Data Validation.

対になっていないサロゲートUnpaired Surrogates

対になっていないサロゲート文字は、バイナリ シリアル化時に失われます。Any unpaired surrogate characters are lost in binary serialization. たとえば、次の文字列が上位サロゲート Unicode 文字を含む(\ud800)、2 つの間Test単語。For example, the following string contains a high surrogate Unicode character (\ud800) in between the two Test words:

Test\ud800Test

シリアル化する前に、文字列のバイト配列のとおりです。Before serialization, the byte array of the string is as follows:

バイト配列値Byte Array Value 文字Character
8484 TT
101101 ee
115115 ss
116116 tt
5529655296 \ud800\ud800
8484 TT
101101 ee
115115 ss
116116 tt

逆シリアル化後に上位サロゲート Unicode 文字は失われます。After deserialization, the high surrogate Unicode character is lost:

バイト配列値Byte Array Value 文字Character
8484 TT
101101 ee
115115 ss
116116 tt
8484 TT
101101 ee
115115 ss
116116 tt

コンストラクター

BinaryFormatter() BinaryFormatter() BinaryFormatter() BinaryFormatter()

BinaryFormatter クラスの新しいインスタンスを既定値で初期化します。 Initializes a new instance of the BinaryFormatter class with default values.

BinaryFormatter(ISurrogateSelector, StreamingContext) BinaryFormatter(ISurrogateSelector, StreamingContext) BinaryFormatter(ISurrogateSelector, StreamingContext) BinaryFormatter(ISurrogateSelector, StreamingContext)

サロゲート セレクターおよびストリーム コンテキストを指定して、BinaryFormatter クラスの新しいインスタンスを初期化します。 Initializes a new instance of the BinaryFormatter class with a given surrogate selector and streaming context.

プロパティ

AssemblyFormat AssemblyFormat AssemblyFormat AssemblyFormat

アセンブリの検索と読み込みに関するデシリアライザーの動作を取得または設定します。 Gets or sets the behavior of the deserializer with regards to finding and loading assemblies.

Binder Binder Binder Binder

シリアル化されたオブジェクトから型へのバインディングを制御する、SerializationBinder 型のオブジェクトを取得または設定します。 Gets or sets an object of type SerializationBinder that controls the binding of a serialized object to a type.

Context Context Context Context

対象のフォーマッタで使用する StreamingContext を取得または設定します。 Gets or sets the StreamingContext for this formatter.

FilterLevel FilterLevel FilterLevel FilterLevel

TypeFilterLevel が実行する自動逆シリアル化の BinaryFormatter を取得または設定します。 Gets or sets the TypeFilterLevel of automatic deserialization the BinaryFormatter performs.

SurrogateSelector SurrogateSelector SurrogateSelector SurrogateSelector

シリアル化中および逆シリアル化中に行われる型の置換を制御する ISurrogateSelector を取得または設定します。 Gets or sets a ISurrogateSelector that controls type substitution during serialization and deserialization.

TypeFormat TypeFormat TypeFormat TypeFormat

シリアル化されたストリームにおける型の記述のレイアウト形式を取得または設定します。 Gets or sets the format in which type descriptions are laid out in the serialized stream.

方法

Deserialize(Stream) Deserialize(Stream) Deserialize(Stream) Deserialize(Stream)

指定したストリームをオブジェクト グラフに逆シリアル化します。 Deserializes the specified stream into an object graph.

Deserialize(Stream, HeaderHandler) Deserialize(Stream, HeaderHandler) Deserialize(Stream, HeaderHandler) Deserialize(Stream, HeaderHandler)

指定したストリームをオブジェクト グラフに逆シリアル化します。 Deserializes the specified stream into an object graph. そのストリーム内にヘッダーがある場合は、指定した HeaderHandler がそのヘッダーを処理します。 The provided HeaderHandler handles any headers in that stream.

DeserializeMethodResponse(Stream, HeaderHandler, IMethodCallMessage) DeserializeMethodResponse(Stream, HeaderHandler, IMethodCallMessage) DeserializeMethodResponse(Stream, HeaderHandler, IMethodCallMessage) DeserializeMethodResponse(Stream, HeaderHandler, IMethodCallMessage)

指定した Stream から、リモート メソッド呼び出しへの応答を逆シリアル化します。 Deserializes a response to a remote method call from the provided Stream.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

指定したオブジェクトが、現在のオブジェクトと等しいかどうかを判断します。 Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

既定のハッシュ関数として機能します。 Serves as the default hash function.

(Inherited from Object)
GetType() GetType() GetType() GetType()

現在のインスタンスの Type を取得します。 Gets the Type of the current instance.

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

現在の Object の簡易コピーを作成します。 Creates a shallow copy of the current Object.

(Inherited from Object)
Serialize(Stream, Object) Serialize(Stream, Object) Serialize(Stream, Object) Serialize(Stream, Object)

オブジェクト、または先頭 (ルート) を指定したオブジェクト グラフを、指定したストリームにシリアル化します。 Serializes the object, or graph of objects with the specified top (root), to the given stream.

Serialize(Stream, Object, Header[]) Serialize(Stream, Object, Header[]) Serialize(Stream, Object, Header[]) Serialize(Stream, Object, Header[])

オブジェクト、または先頭 (ルート) を指定したオブジェクト グラフを、指定したヘッダーを結び付けて、指定したストリームにシリアル化します。 Serializes the object, or graph of objects with the specified top (root), to the given stream attaching the provided headers.

ToString() ToString() ToString() ToString()

現在のオブジェクトを表す文字列を返します。 Returns a string that represents the current object.

(Inherited from Object)
UnsafeDeserialize(Stream, HeaderHandler) UnsafeDeserialize(Stream, HeaderHandler) UnsafeDeserialize(Stream, HeaderHandler) UnsafeDeserialize(Stream, HeaderHandler)

指定したストリームをオブジェクト グラフに逆シリアル化します。 Deserializes the specified stream into an object graph. そのストリーム内にヘッダーがある場合は、指定した HeaderHandler がそのヘッダーを処理します。 The provided HeaderHandler handles any headers in that stream.

UnsafeDeserializeMethodResponse(Stream, HeaderHandler, IMethodCallMessage) UnsafeDeserializeMethodResponse(Stream, HeaderHandler, IMethodCallMessage) UnsafeDeserializeMethodResponse(Stream, HeaderHandler, IMethodCallMessage) UnsafeDeserializeMethodResponse(Stream, HeaderHandler, IMethodCallMessage)

指定した Stream から、リモート メソッド呼び出しへの応答を逆シリアル化します。 Deserializes a response to a remote method call from the provided Stream.

適用対象