BinaryFormatter 클래스

정의

주의

BinaryFormatter serialization is obsolete and should not be used. See https://aka.ms/binaryformatter for more information.

개체 또는 연결된 개체의 전체 그래프를 이진 형식으로 직렬화 및 역직렬화합니다.

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
[System.Obsolete("BinaryFormatter serialization is obsolete and should not be used. See https://aka.ms/binaryformatter for more information.", DiagnosticId="SYSLIB0011", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
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
[<System.Obsolete("BinaryFormatter serialization is obsolete and should not be used. See https://aka.ms/binaryformatter for more information.", DiagnosticId="SYSLIB0011", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
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 보안 가이드를 참조하세요.

SoapFormatterBinaryFormatter 클래스 구현 합니다 IRemotingFormatter 원격 프로시저 호출 (Rpc)을 지원 하기 위해 인터페이스 및 IFormatter 인터페이스 (에서 상속는 IRemotingFormatter) 개체 그래프 serialization을 지원 합니다. 합니다 SoapFormatter 클래스에서는 Rpc ISoapMessage 개체를 사용 하지 않고는 IRemotingFormatter 기능.

Rpc를 하는 동안는 IRemotingFormatter 인터페이스를 사용 하면 두 개의 별도 개체 그래프의 사양을: (원격 함수 호출에 대 한 정보를 전달 하는 헤더 개체의 배열을 포함 하는 그래프를 추가 하 고 serialize 할 개체 그래프 예, 트랜잭션 ID 또는 메서드 서명을).

별도의 를 사용하는 BinaryFormatter RPC는 호출된 메서드를 포함하는 원격 개체를 사용하여 서버로 전송되는 메서드 호출과 호출된 메서드의 상태 및 응답 정보를 사용하여 서버에서 클라이언트로 전송되는 메서드 응답입니다.

메서드 호출을 serialization하는 동안 개체 그래프의 첫 번째 개체는 인터페이스를 IMethodCallMessage 지원해야 합니다. 메서드 호출을 역직렬화하려면 매개 변수와 Deserialize 함께 메서드를 HeaderHandler 사용합니다. 원격 인프라를 사용 합니다 HeaderHandler 지 원하는 개체를 생성 하는 대리자는 ISerializable 인터페이스입니다. 는 BinaryFormatter 대리자를 호출할 HeaderHandler 때 호출되는 메서드를 사용하여 원격 개체의 URI를 반환합니다. 반환된 그래프의 첫 번째 개체는 인터페이스를 IMethodCallMessage 지원합니다.

메서드 응답에 대한 serialization 프로시저는 메서드 호출의 직렬화 프로시저와 동일합니다. 개체 그래프의 첫 번째 개체가 인터페이스를 지원해야 한다는 점을 제외하면 입니다 IMethodReturnMessage . 메서드 응답을 역직렬화하려면 메서드를 DeserializeMethodResponse 사용합니다. 시간을 절약하기 위해 호출자 개체에 대한 세부 정보는 메서드 호출 중에 원격 개체로 전송되지 않습니다. 이러한 세부 정보는 매개 변수의 메서드에 전달 DeserializeMethodResponse 되는 원래 메서드 호출에서 IMethodCallMessage 가져옵니다. 메서드에서 반환된 그래프의 첫 번째 개체는 DeserializeMethodResponse 인터페이스를 IMethodReturnMessage 지원합니다.

중요

이진 serialization을 사용하여 신뢰할 수 없는 데이터를 역직렬화하면 보안 위험이 발생할 수 있습니다. 자세한 내용은 모든 입력 유효성 검사 및BinaryFormatter 보안 가이드를 참조하세요.

납기되지 않은 서로게이트

이진 serialization에서 2차원 서로게이트 문자가 손실됩니다. 예를 들어 다음 문자열은 두 Test 단어 사이에 높은 서로게이트 유니코드 문자 (\ud800)를 포함합니다.

Test\ud800Test

serialization 전에 문자열의 바이트 배열은 다음과 같습니다.

바이트 배열 값 문자
84 T
101 e
115
116 t
55296 \ud800
84 T
101 e
115
116 t

역직렬화 후 상위 서로게이트 유니코드 문자가 손실됩니다.

바이트 배열 값 문자
84 T
101 e
115
116 t
84 T
101 e
115
116 t

생성자

BinaryFormatter()
사용되지 않습니다.

기본값을 사용하여 BinaryFormatter 클래스의 새 인스턴스를 초기화합니다.

BinaryFormatter(ISurrogateSelector, StreamingContext)
사용되지 않습니다.

제공된 서로게이트 선택기와 스트리밍 컨텍스트를 사용하여 BinaryFormatter 클래스의 새 인스턴스를 초기화합니다.

속성

AssemblyFormat
사용되지 않습니다.

어셈블리를 찾고 로드하는 작업과 관련된 역직렬 변환기 동작을 가져오거나 설정합니다.

Binder
사용되지 않습니다.

(안전하지 않음) 특정 형식으로 직렬화된 개체의 바인딩을 제어하는 SerializationBinder 형식의 개체를 가져오거나 설정합니다.

Context
사용되지 않습니다.

이 포맷터에 대한 StreamingContext를 가져오거나 설정합니다.

FilterLevel
사용되지 않습니다.

TypeFilterLevel가 수행하는 자동 deserialization의 BinaryFormatter을 가져오거나 설정합니다.

SurrogateSelector
사용되지 않습니다.

serialization 및 deserialization을 수행하는 동안 형식 대체를 제어하는 ISurrogateSelector를 가져오거나 설정합니다.

TypeFormat
사용되지 않습니다.

serialize된 스트림에서 형식 설명을 레이아웃하는 형식을 가져오거나 설정합니다.

메서드

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합니다.

Serialize(Stream, Object, Header[])
사용되지 않습니다.

개체나 지정된 최상위(루트)를 가진 개체의 그래프를 제공된 헤더가 첨부된 해당 스트림으로 serialize합니다.

ToString()
사용되지 않습니다.

현재 개체를 나타내는 문자열을 반환합니다.

(다음에서 상속됨 Object)
UnsafeDeserialize(Stream, HeaderHandler)
사용되지 않습니다.

지정된 스트림을 개체 그래프로 역직렬화합니다. 이렇게 되면 제공된 HeaderHandler가 해당 스트림의 모든 헤더를 처리합니다.

UnsafeDeserializeMethodResponse(Stream, HeaderHandler, IMethodCallMessage)
사용되지 않습니다.

지정된 Stream의 원격 메서드 호출에 대한 응답을 역직렬화합니다.

적용 대상