BinaryFormatter クラス

定義

オブジェクト、または接続されているオブジェクトのグラフ全体を、バイナリ形式でシリアル化および逆シリアル化します。

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

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

注釈

警告

BinaryFormatter は安全ではないため、セキュリティで保護することはできません。 詳細については、「 Binaryformatter セキュリティガイド」を参照してください。

クラスと クラスは、リモート プロシージャ呼び出し (RPC) をサポートする インターフェイスと、オブジェクトのグラフのシリアル化をサポートする インターフェイス (によって継承される SoapFormatter BinaryFormatter ) IRemotingFormatter IFormatter IRemotingFormatter を実装します。 クラス SoapFormatter は、 機能を使用せずに ISoapMessage 、 オブジェクトを含む RPC も IRemotingFormatter サポートします。

RPC の間、インターフェイスでは、シリアル化するオブジェクトのグラフと、リモート関数呼び出し (トランザクション ID やメソッド シグネチャなど) に関する情報を伝達するヘッダー オブジェクトの配列を含む追加のグラフという 2 つの個別のオブジェクト グラフを指定できます。 IRemotingFormatter

を個別に使用する RPC は、呼び出されたメソッドを含むリモート オブジェクトを使用してサーバーに送信されるメソッド呼び出しと、呼び出されたメソッドの状態と応答情報を使用してサーバーからクライアントに送信されるメソッド応答の 2 つの異なる部分に分かれています。 BinaryFormatter

メソッド呼び出しのシリアル化中に、オブジェクト グラフの最初のオブジェクトが インターフェイスをサポートしている必要 IMethodCallMessage があります。 メソッド呼び出しを逆シリアル化するには、 パラメーターを指定 Deserialize して メソッドを使用 HeaderHandler します。 リモート処理インフラストラクチャは、 デリゲート HeaderHandler を使用して、 インターフェイスをサポートするオブジェクトを生成 ISerializable します。 が BinaryFormatter デリゲートを呼び出すと、呼び出されるメソッドを使用してリモート オブジェクトの HeaderHandler URI を返します。 返されるグラフ内の最初のオブジェクトは、 インターフェイスをサポート IMethodCallMessage します。

メソッド応答のシリアル化プロシージャは、メソッド呼び出しのシリアル化プロシージャと同じですが、オブジェクト グラフの最初のオブジェクトは インターフェイスをサポートする必要 IMethodReturnMessage があります。 メソッドの応答を逆シリアル化するには、 メソッドを使用 DeserializeMethodResponse します。 時間を節約するために、呼び出し元オブジェクトに関する詳細は、メソッド呼び出し中にリモート オブジェクトに送信されません。 これらの詳細は、元のメソッド呼び出しから取得されます。この呼び出しは、 パラメーターの DeserializeMethodResponse メソッドに渡 IMethodCallMessage されます。 メソッドによって返されるグラフ内の最初のオブジェクト DeserializeMethodResponse は、 インターフェイスをサポート IMethodReturnMessage します。

重要

バイナリ シリアル化を使用して信頼されていないデータを逆シリアル化すると、セキュリティ 上のリスクが生じかねない。 詳細については、「データ検証」「BinaryFormatter セキュリティ ガイド」を参照してください

ペアにされていないサロゲート

ペアにされていないサロゲート文字は、バイナリ シリアル化で失われます。 たとえば、次の文字列には、2 つの単語の間に高サロゲート Unicode (\ud800 文字 ) が含 Test まれます。

Test\ud800Test

シリアル化の前に、文字列のバイト配列は次のようになります。

バイト配列値 文字
84 T
101 e
115 s
116 t
55296 \ud800
84 T
101 e
115 s
116 t

逆シリアル化後、サロゲート Unicode 文字が大きすぎます。

バイト配列値 文字
84 T
101 e
115 s
116 t
84 T
101 e
115 s
116 t

コンストラクター

BinaryFormatter()

BinaryFormatter クラスの新しいインスタンスを既定値で初期化します。

BinaryFormatter(ISurrogateSelector, StreamingContext)

サロゲート セレクターおよびストリーム コンテキストを指定して、BinaryFormatter クラスの新しいインスタンスを初期化します。

プロパティ

AssemblyFormat

アセンブリの検索と読み込みに関するデシリアライザーの動作を取得または設定します。

Binder

(安全ではありません) シリアル化されたオブジェクトから型へのバインディングを制御する、SerializationBinder 型のオブジェクトを取得または設定します。

Context

対象のフォーマッタで使用する StreamingContext を取得または設定します。

FilterLevel

TypeFilterLevel が実行する自動逆シリアル化の BinaryFormatter を取得または設定します。

SurrogateSelector

シリアル化中および逆シリアル化中に行われる型の置換を制御する ISurrogateSelector を取得または設定します。

TypeFormat

シリアル化されたストリームにおける型の記述のレイアウト形式を取得または設定します。

メソッド

Deserialize(Stream)
互換性のために残されています。

指定したストリームをオブジェクト グラフに逆シリアル化します。

Deserialize(Stream, HeaderHandler)

指定したストリームをオブジェクト グラフに逆シリアル化します。 そのストリーム内にヘッダーがある場合は、指定した HeaderHandler がそのヘッダーを処理します。

DeserializeMethodResponse(Stream, HeaderHandler, IMethodCallMessage)

指定した Stream から、リモート メソッド呼び出しへの応答を逆シリアル化します。

Equals(Object)

指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
MemberwiseClone()

現在の Object の簡易コピーを作成します。

(継承元 Object)
Serialize(Stream, Object)
互換性のために残されています。

オブジェクト、または先頭 (ルート) を指定したオブジェクト グラフを、指定したストリームにシリアル化します。

Serialize(Stream, Object, Header[])

オブジェクト、または先頭 (ルート) を指定したオブジェクト グラフを、指定したヘッダーを結び付けて、指定したストリームにシリアル化します。

ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)
UnsafeDeserialize(Stream, HeaderHandler)

指定したストリームをオブジェクト グラフに逆シリアル化します。 そのストリーム内にヘッダーがある場合は、指定した HeaderHandler がそのヘッダーを処理します。

UnsafeDeserializeMethodResponse(Stream, HeaderHandler, IMethodCallMessage)

指定した Stream から、リモート メソッド呼び出しへの応答を逆シリアル化します。

適用対象