BinaryFormatter BinaryFormatter BinaryFormatter BinaryFormatter Class

Definizione

Serializza e deserializza un oggetto o un intero grafico di oggetti collegati in formato binario.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
Ereditarietà
BinaryFormatterBinaryFormatterBinaryFormatterBinaryFormatter
Attributi
Implementazioni

Esempi

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

Commenti

Le SoapFormatter classi BinaryFormatter e implementano IRemotingFormatter l'interfaccia per supportare RPC (Remote Procedure Call) e l' IFormatter interfaccia (ereditata da IRemotingFormatter) per supportare la serializzazione di un grafico di oggetti.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 supporta inoltre le RPC ISoapMessage con oggetti, senza utilizzare IRemotingFormatter la funzionalità.The SoapFormatter class also supports RPCs with ISoapMessage objects, without using the IRemotingFormatter functionality.

Durante le RPC, IRemotingFormatter l'interfaccia consente la specifica di due oggetti grafici distinti, ovvero il grafico degli oggetti da serializzare, e un grafico aggiuntivo che contiene una matrice di oggetti Header che contengono informazioni sulla chiamata di funzione remota (per esempio di ID transazione o firma del metodo).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 che usano il BinaryFormatter separato in due parti distinte: le chiamate al metodo, che vengono inviate al server con l'oggetto remoto che contiene il metodo chiamato e le risposte ai metodi, che vengono inviate dal server al client con lo stato e la risposta informazioni del metodo chiamato.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.

Durante la serializzazione di una chiamata al metodo, il primo oggetto dell'oggetto grafico IMethodCallMessage deve supportare l'interfaccia.During serialization of a method call the first object of the object graph must support the IMethodCallMessage interface. Per deserializzare una chiamata al metodo, utilizzare Deserialize il metodo con HeaderHandler il parametro.To deserialize a method call, use the Deserialize method with the HeaderHandler parameter. L'infrastruttura .NET Remoting USA HeaderHandler il delegato per produrre un oggetto che supporta ISerializable l'interfaccia.The remoting infrastructure uses the HeaderHandler delegate to produce an object that supports the ISerializable interface. Quando richiama il HeaderHandler delegato, restituisce l'URI dell'oggetto remoto con il metodo chiamato. BinaryFormatterWhen the BinaryFormatter invokes the HeaderHandler delegate, it returns the URI of the remote object with the method that is being called. Il primo oggetto nel grafico restituito supporta l' IMethodCallMessage interfaccia.The first object in the graph returned supports the IMethodCallMessage interface.

La procedura di serializzazione per una risposta al metodo è identica a quella di una chiamata al metodo, ad eccezione del fatto che il primo IMethodReturnMessage oggetto dell'oggetto grafico deve supportare l'interfaccia.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. Per deserializzare una risposta al metodo, utilizzare DeserializeMethodResponse il metodo.To deserialize a method response, use the DeserializeMethodResponse method. Per risparmiare tempo, i dettagli relativi all'oggetto chiamante non vengono inviati all'oggetto remoto durante la chiamata al metodo.To save time, details about the caller object are not sent to the remote object during the method call. Questi dettagli vengono invece ottenuti dalla chiamata al metodo originale, che viene passata al DeserializeMethodResponse metodo IMethodCallMessage nel parametro.These details are instead obtained from the original method call, which is passed to the DeserializeMethodResponse method in the IMethodCallMessage parameter. Il primo oggetto nel grafico restituito dal DeserializeMethodResponse metodo supporta l' IMethodReturnMessage interfaccia.The first object in the graph returned by the DeserializeMethodResponse method supports the IMethodReturnMessage interface.

Importante

L'uso della serializzazione binaria per deserializzare i dati non attendibili può causare rischi per la sicurezza.Using binary serialization to deserialize untrusted data can lead to security risks. Per altre informazioni, vedere Data Validation (Convalida dei dati).For more information, see Data Validation.

Surrogati non abbinatiUnpaired Surrogates

I caratteri surrogati non abbinati vengono persi nella serializzazione binaria.Any unpaired surrogate characters are lost in binary serialization. La stringa seguente, ad esempio, contiene un carattere (\ud800Unicode surrogato alto) tra le due Test parole:For example, the following string contains a high surrogate Unicode character (\ud800) in between the two Test words:

Test\ud800Test

Prima della serializzazione, la matrice di byte della stringa è la seguente:Before serialization, the byte array of the string is as follows:

Valore matrice di byteByte Array Value CarattereCharacter
8484 TT
101101 he
115115 ss
116116 ut
5529655296 \ud800\ud800
8484 TT
101101 he
115115 ss
116116 ut

Dopo la deserializzazione, il carattere Unicode surrogato elevato viene perso:After deserialization, the high surrogate Unicode character is lost:

Valore matrice di byteByte Array Value CarattereCharacter
8484 TT
101101 he
115115 ss
116116 ut
8484 TT
101101 he
115115 ss
116116 ut

Costruttori

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

Inizializza una nuova istanza della classe BinaryFormatter con i valori predefiniti.Initializes a new instance of the BinaryFormatter class with default values.

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

Inizializza una nuova istanza della classe BinaryFormatter con un selettore di surrogati e un contesto di flusso specificati.Initializes a new instance of the BinaryFormatter class with a given surrogate selector and streaming context.

Proprietà

AssemblyFormat AssemblyFormat AssemblyFormat AssemblyFormat

Ottiene o imposta il comportamento del deserializzatore relativamente al reperire e caricare assembly.Gets or sets the behavior of the deserializer with regards to finding and loading assemblies.

Binder Binder Binder Binder

Ottiene o imposta un oggetto di tipo SerializationBinder che controlla l'associazione di un oggetto serializzato a un tipo.Gets or sets an object of type SerializationBinder that controls the binding of a serialized object to a type.

Context Context Context Context

Ottiene o imposta l'oggetto StreamingContext per questo formattatore.Gets or sets the StreamingContext for this formatter.

FilterLevel FilterLevel FilterLevel FilterLevel

Ottiene o imposta l'oggetto TypeFilterLevel per la deserializzazione automatica eseguita da BinaryFormatter.Gets or sets the TypeFilterLevel of automatic deserialization the BinaryFormatter performs.

SurrogateSelector SurrogateSelector SurrogateSelector SurrogateSelector

Ottiene o imposta un oggetto ISurrogateSelector che controlla la sostituzione dei tipi durante la serializzazione e la deserializzazione.Gets or sets a ISurrogateSelector that controls type substitution during serialization and deserialization.

TypeFormat TypeFormat TypeFormat TypeFormat

Ottiene o imposta il formato in cui sono disposte le descrizioni dei tipi nel flusso serializzato.Gets or sets the format in which type descriptions are laid out in the serialized stream.

Metodi

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

Deserializza il flusso specificato in un grafico di oggetti.Deserializes the specified stream into an object graph.

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

Deserializza il flusso specificato in un grafico di oggetti.Deserializes the specified stream into an object graph. L'oggetto HeaderHandler fornito gestisce eventuali intestazioni nel flusso.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)

Deserializza una risposta a una chiamata remota a un metodo dal Stream specificato.Deserializes a response to a remote method call from the provided Stream.

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

Determina se l'oggetto specificato è uguale all'oggetto corrente.Determines whether the specified object is equal to the current object.

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

Funge da funzione hash predefinita.Serves as the default hash function.

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

Ottiene l'oggetto Type dell'istanza corrente.Gets the Type of the current instance.

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

Crea una copia superficiale dell'oggetto Object corrente.Creates a shallow copy of the current Object.

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

Serializza l'oggetto o il grafico di oggetti con l'oggetto di primo livello (radice) specificato nel flusso indicato.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[])

Serializza l'oggetto o il grafico di oggetti con l'oggetto di primo livello (radice) specificato nel flusso indicato, collegando le intestazioni fornite.Serializes the object, or graph of objects with the specified top (root), to the given stream attaching the provided headers.

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

Restituisce una stringa che rappresenta l'oggetto corrente.Returns a string that represents the current object.

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

Deserializza il flusso specificato in un grafico di oggetti.Deserializes the specified stream into an object graph. L'oggetto HeaderHandler fornito gestisce eventuali intestazioni nel flusso.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)

Deserializza una risposta a una chiamata remota a un metodo dal Stream specificato.Deserializes a response to a remote method call from the provided Stream.

Si applica a