BinaryFormatter 클래스

정의

개체 또는 연결된 개체의 전체 그래프를 이진 형식으로 serialize 및 deserialize합니다.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
상속
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

설명

SoapFormatterBinaryFormatter 클래스 구현 합니다 IRemotingFormatter 원격 프로시저 호출 (Rpc)을 지원 하기 위해 인터페이스 및 IFormatter 인터페이스 (에서 상속는 IRemotingFormatter) 개체 그래프 serialization을 지원 합니다.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 인터페이스를 사용 하면 두 개의 별도 개체 그래프의 사양을: (원격 함수 호출에 대 한 정보를 전달 하는 헤더 개체의 배열을 포함 하는 그래프를 추가 하 고 serialize 할 개체 그래프 예, 트랜잭션 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 두 가지 부분에 별도: 메서드 응답에 상태를 사용 하 여 클라이언트에 서버에서 전송 되는 호출 된 메서드가 포함 된 원격 개체를 사용 하 여 서버에 전송한 메서드 호출 및 응답 호출된 된 메서드에의 정보입니다.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.

메서드 호출의 serialization 동안 개체 그래프의 첫 번째 개체를 지원 해야 합니다는 IMethodCallMessage 인터페이스입니다.During serialization of a method call the first object of the object graph must support the IMethodCallMessage interface. 메서드 호출을 deserialize 하는 데 사용 합니다 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.

메서드 응답에 대 한 serialization 절차는 메서드 호출의 동일에서 개체의 첫 번째 개체를 제외 하 고 그래프를 지원 해야 합니다 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. 메서드 응답을 deserialize 하는 데 사용 된 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.

중요

신뢰할 수 없는 데이터를 deserialize 하는 데 이진 serialization을 사용 하 여 보안 위험이 발생할 수 있습니다.Using binary serialization to deserialize untrusted data can lead to security risks. 자세한 내용은 데이터 유효성을 참조하세요.For more information, see Data Validation.

짝이 없는 서로게이트Unpaired Surrogates

쌍을 이루지 않는 서로게이트 문자는 이진 serialization에서 손실 됩니다.Any unpaired surrogate characters are lost in binary serialization. 다음 문자열 high surrogate 유니코드 문자를 포함 하는 예를 들어 (\ud800) 두 사이 Test 단어:For example, the following string contains a high surrogate Unicode character (\ud800) in between the two Test words:

Test\ud800Test

Serialization 하기 전 바이트 배열을 문자열은 다음과 같습니다.Before serialization, the byte array of the string is as follows:

바이트 배열 값입니다.Byte Array Value 문자Character
8484 TT
101101 ee
115115 s
116116 tt
5529655296 \ud800\ud800
8484 TT
101101 ee
115115 s
116116 tt

Deserialization 후 상위 서로게이트 유니코드 문자가 손실 됩니다.After deserialization, the high surrogate Unicode character is lost:

바이트 배열 값입니다.Byte Array Value 문자Character
8484 TT
101101 ee
115115 s
116116 tt
8484 TT
101101 ee
115115 s
116116 tt

생성자

BinaryFormatter()

기본값을 사용하여 BinaryFormatter 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the BinaryFormatter class with default values.

BinaryFormatter(ISurrogateSelector, StreamingContext)

제공된 서로게이트 선택기와 스트리밍 컨텍스트를 사용하여 BinaryFormatter 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the BinaryFormatter class with a given surrogate selector and streaming context.

속성

AssemblyFormat

어셈블리를 찾고 로드하는 작업과 관련된 deserializer 동작을 가져오거나 설정합니다.Gets or sets the behavior of the deserializer with regards to finding and loading assemblies.

Binder

형식에 대해 serialize된 개체를 제어하는 SerializationBinder 형식의 개체를 가져오거나 설정합니다.Gets or sets an object of type SerializationBinder that controls the binding of a serialized object to a type.

Context

이 포맷터에 대한 StreamingContext를 가져오거나 설정합니다.Gets or sets the StreamingContext for this formatter.

FilterLevel

TypeFilterLevel가 수행하는 자동 deserialization의 BinaryFormatter을 가져오거나 설정합니다.Gets or sets the TypeFilterLevel of automatic deserialization the BinaryFormatter performs.

SurrogateSelector

serialization 및 deserialization을 수행하는 동안 형식 대체를 제어하는 ISurrogateSelector를 가져오거나 설정합니다.Gets or sets a ISurrogateSelector that controls type substitution during serialization and deserialization.

TypeFormat

serialize된 스트림에서 형식 설명을 레이아웃하는 형식을 가져오거나 설정합니다.Gets or sets the format in which type descriptions are laid out in the serialized stream.

메서드

Deserialize(Stream)

지정된 스트림을 개체 그래프로 deserialize합니다.Deserializes the specified stream into an object graph.

Deserialize(Stream, HeaderHandler)

지정된 스트림을 개체 그래프로 deserialize합니다.Deserializes the specified stream into an object graph. 이렇게 되면 제공된 HeaderHandler가 해당 스트림의 모든 헤더를 처리합니다.The provided HeaderHandler handles any headers in that stream.

DeserializeMethodResponse(Stream, HeaderHandler, IMethodCallMessage)

지정된 Stream의 원격 메서드 호출에 대한 응답을 deserialize합니다.Deserializes a response to a remote method call from the provided Stream.

Equals(Object)

지정한 개체와 현재 개체가 같은지 여부를 확인합니다.Determines whether the specified object is equal to the current object.

(다음에서 상속됨 Object)
GetHashCode()

기본 해시 함수로 작동합니다.Serves as the default hash function.

(다음에서 상속됨 Object)
GetType()

현재 인스턴스의 Type을 가져옵니다.Gets the Type of the current instance.

(다음에서 상속됨 Object)
MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.Creates a shallow copy of the current Object.

(다음에서 상속됨 Object)
Serialize(Stream, Object)

개체나 지정된 최상위(루트)를 가진 개체의 그래프를 해당 스트림으로 serialize합니다.Serializes the object, or graph of objects with the specified top (root), to the given stream.

Serialize(Stream, Object, Header[])

개체나 지정된 최상위(루트)를 가진 개체의 그래프를 제공된 헤더가 첨부된 해당 스트림으로 serialize합니다.Serializes the object, or graph of objects with the specified top (root), to the given stream attaching the provided headers.

ToString()

현재 개체를 나타내는 문자열을 반환합니다.Returns a string that represents the current object.

(다음에서 상속됨 Object)
UnsafeDeserialize(Stream, HeaderHandler)

지정된 스트림을 개체 그래프로 deserialize합니다.Deserializes the specified stream into an object graph. 이렇게 되면 제공된 HeaderHandler가 해당 스트림의 모든 헤더를 처리합니다.The provided HeaderHandler handles any headers in that stream.

UnsafeDeserializeMethodResponse(Stream, HeaderHandler, IMethodCallMessage)

지정된 Stream의 원격 메서드 호출에 대한 응답을 deserialize합니다.Deserializes a response to a remote method call from the provided Stream.

적용 대상