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

Комментарии

SoapFormatter И BinaryFormatter классы реализуют 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 Класс также поддерживает удаленный вызов процедур с ISoapMessage объектов без использования IRemotingFormatter функциональные возможности.The SoapFormatter class also supports RPCs with ISoapMessage objects, without using the IRemotingFormatter functionality.

Во время вызовов RPC IRemotingFormatter интерфейс позволяет задать два отдельных графов объектов: графа объектов для сериализации и дополнительные диаграммы, содержащий массив объектов заголовков, которые передают сведения об удаленном вызове функции (для Например, идентификатор транзакции или подпись метода).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.

Во время сериализации вызова метода, должен поддерживать первый объект из графа объектов 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.

Процедура сериализации для ответа метода идентична вызова метода, за исключением первый объект из объекта должен поддерживать graph 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. Дополнительные сведения: Data Validation (Проверка данных).For more information, see Data Validation.

Непарные символыUnpaired Surrogates

Любые Непарные символы, теряются при двоичной сериализации.Any unpaired surrogate characters are lost in binary serialization. Например, следующая строка содержит значение верхнего суррогатного символа Юникода (\ud800) между двумя 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 йe
115115 ss
116116 tt
5529655296 \ud800\ud800
8484 TT
101101 йe
115115 ss
116116 tt

После десериализации символ Юникода символом-заместителем будет потеряна.After deserialization, the high surrogate Unicode character is lost:

Значение массива байтовByte Array Value ЗнакCharacter
8484 TT
101101 йe
115115 ss
116116 tt
8484 TT
101101 йe
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.

Применяется к