BinaryFormatter BinaryFormatter BinaryFormatter BinaryFormatter Class

Définition

Sérialise et désérialise un objet ou un graphique complet d’objets connectés, au format binaire.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
Héritage
BinaryFormatterBinaryFormatterBinaryFormatterBinaryFormatter
Attributs
Implémente

Exemples

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

Remarques

Les SoapFormatter classes BinaryFormatter et implémentent IRemotingFormatter l’interface pour prendre en charge les appels de procédure distante (RPC) et IRemotingFormatterl' IFormatter interface (héritée par) pour prendre en charge la sérialisation d’un graphique d’objets.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. La SoapFormatter classe prend également en charge ISoapMessage les RPC avec des objets IRemotingFormatter , sans utiliser la fonctionnalité.The SoapFormatter class also supports RPCs with ISoapMessage objects, without using the IRemotingFormatter functionality.

Pendant les RPC, IRemotingFormatter l’interface permet la spécification de deux graphiques d’objets distincts: le graphique d’objets à sérialiser et un graphique supplémentaire qui contient un tableau d’objets d’en-tête qui communiquent des informations sur l’appel de fonction distant (pour exemple: ID de transaction ou signature de méthode).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 qui utilisent le BinaryFormatter distinct en deux parties distinctes: appels de méthode, qui sont envoyés au serveur avec l’objet distant qui contient la méthode appelée, et les réponses de méthode, qui sont envoyées du serveur au client avec l’État et la réponse informations de la méthode appelée.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.

Lors de la sérialisation d’un appel de méthode, le premier objet du graphique d’objet IMethodCallMessage doit prendre en charge l’interface.During serialization of a method call the first object of the object graph must support the IMethodCallMessage interface. Pour désérialiser un appel de méthode, utilisez Deserialize la méthode avec HeaderHandler le paramètre.To deserialize a method call, use the Deserialize method with the HeaderHandler parameter. L’infrastructure de communication à distance HeaderHandler utilise le délégué pour produire un objet qui ISerializable prend en charge l’interface.The remoting infrastructure uses the HeaderHandler delegate to produce an object that supports the ISerializable interface. Lorsque appelle le HeaderHandler délégué, il retourne l’URI de l’objet distant avec la méthode appelée. BinaryFormatterWhen the BinaryFormatter invokes the HeaderHandler delegate, it returns the URI of the remote object with the method that is being called. Le premier objet du graphique retourné prend en charge IMethodCallMessage l’interface.The first object in the graph returned supports the IMethodCallMessage interface.

La procédure de sérialisation d’une réponse de méthode est identique à celle d’un appel de méthode, sauf que le premier objet du graphique d’objet IMethodReturnMessage doit prendre en charge l’interface.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. Pour désérialiser une réponse de méthode, utilisez DeserializeMethodResponse la méthode.To deserialize a method response, use the DeserializeMethodResponse method. Pour gagner du temps, les détails relatifs à l’objet appelant ne sont pas envoyés à l’objet distant pendant l’appel de la méthode.To save time, details about the caller object are not sent to the remote object during the method call. Ces détails sont obtenus à partir de l’appel de méthode d’origine, qui est DeserializeMethodResponse passé à la IMethodCallMessage méthode dans le paramètre.These details are instead obtained from the original method call, which is passed to the DeserializeMethodResponse method in the IMethodCallMessage parameter. Le premier objet dans le graphique retourné par la DeserializeMethodResponse méthode prend en IMethodReturnMessage charge l’interface.The first object in the graph returned by the DeserializeMethodResponse method supports the IMethodReturnMessage interface.

Important

L’utilisation de la sérialisation binaire pour désérialiser des données non approuvées peut entraîner des risques de sécurité.Using binary serialization to deserialize untrusted data can lead to security risks. Pour plus d’informations, consultez Validation des données.For more information, see Data Validation.

Substituts non appariésUnpaired Surrogates

Les caractères de substitution non couplés sont perdus lors de la sérialisation binaire.Any unpaired surrogate characters are lost in binary serialization. Par exemple, la chaîne suivante contient un caractère (\ud800Unicode de substitution étendu entre les deux Test mots:For example, the following string contains a high surrogate Unicode character (\ud800) in between the two Test words:

Test\ud800Test

Avant la sérialisation, le tableau d’octets de la chaîne est le suivant:Before serialization, the byte array of the string is as follows:

Valeur du tableau d’octetsByte Array Value CaractèreCharacter
8484 TT
101101 ee
115115 ss
116116 tt
5529655296 \ud800\ud800
8484 TT
101101 ee
115115 ss
116116 tt

Après la désérialisation, le caractère Unicode de substitution étendu est perdu:After deserialization, the high surrogate Unicode character is lost:

Valeur du tableau d’octetsByte Array Value CaractèreCharacter
8484 TT
101101 ee
115115 ss
116116 tt
8484 TT
101101 ee
115115 ss
116116 tt

Constructeurs

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

Initialise une nouvelle instance de la classe BinaryFormatter avec des valeurs par défaut.Initializes a new instance of the BinaryFormatter class with default values.

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

Initialise une nouvelle instance de la classe BinaryFormatter avec un sélecteur de substitut et un contexte de diffusion en continu donnés.Initializes a new instance of the BinaryFormatter class with a given surrogate selector and streaming context.

Propriétés

AssemblyFormat AssemblyFormat AssemblyFormat AssemblyFormat

Obtient ou définit le comportement du désérialiseur par rapport à la recherche et au chargement d'assemblys.Gets or sets the behavior of the deserializer with regards to finding and loading assemblies.

Binder Binder Binder Binder

Obtient ou définit un objet de type SerializationBinder qui contrôle la liaison d'un objet sérialisé à un type.Gets or sets an object of type SerializationBinder that controls the binding of a serialized object to a type.

Context Context Context Context

Obtient ou définit StreamingContext pour ce formateur.Gets or sets the StreamingContext for this formatter.

FilterLevel FilterLevel FilterLevel FilterLevel

Obtient ou définit le TypeFilterLevel de la désérialisation automatique effectuée par BinaryFormatter.Gets or sets the TypeFilterLevel of automatic deserialization the BinaryFormatter performs.

SurrogateSelector SurrogateSelector SurrogateSelector SurrogateSelector

Obtient ou définit un ISurrogateSelector qui contrôle la substitution de type pendant la sérialisation et la désérialisation.Gets or sets a ISurrogateSelector that controls type substitution during serialization and deserialization.

TypeFormat TypeFormat TypeFormat TypeFormat

Obtient ou définit le format dans lequel les descriptions de type sont disposées dans le flux sérialisé.Gets or sets the format in which type descriptions are laid out in the serialized stream.

Méthodes

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

Désérialise le flux spécifié dans un graphique d'objets.Deserializes the specified stream into an object graph.

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

Désérialise le flux spécifié dans un graphique d'objets.Deserializes the specified stream into an object graph. Le HeaderHandler fourni gère n'importe quel en-tête dans ce flux.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)

Désérialise une réponse à un appel de méthode distant à partir du Stream fourni.Deserializes a response to a remote method call from the provided Stream.

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

Détermine si l'objet spécifié est identique à l'objet actuel.Determines whether the specified object is equal to the current object.

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

Fait office de fonction de hachage par défaut.Serves as the default hash function.

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

Obtient le Type de l'instance actuelle.Gets the Type of the current instance.

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

Crée une copie superficielle de l'objet Object actuel.Creates a shallow copy of the current Object.

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

Sérialise l'objet ou le graphique d'objets avec l'objet supérieur (racine) spécifié vers le flux donné.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[])

Sérialise l'objet ou le graphique d'objets avec l'objet supérieur (racine) spécifié vers le flux donné en attachant les en-têtes fournis.Serializes the object, or graph of objects with the specified top (root), to the given stream attaching the provided headers.

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

Retourne une chaîne qui représente l'objet actuel.Returns a string that represents the current object.

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

Désérialise le flux spécifié dans un graphique d'objets.Deserializes the specified stream into an object graph. Le HeaderHandler fourni gère n'importe quel en-tête dans ce flux.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)

Désérialise une réponse à un appel de méthode distant à partir du Stream fourni.Deserializes a response to a remote method call from the provided Stream.

S’applique à