BinaryFormatter BinaryFormatter BinaryFormatter BinaryFormatter Class

Definition

Serialisiert und deserialisiert ein Objekt oder ein ganzes Diagramm verbundener Objekte im binären Format.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
Vererbung
BinaryFormatterBinaryFormatterBinaryFormatterBinaryFormatter
Attribute
Implementiert

Beispiele

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

Hinweise

Die SoapFormatter und BinaryFormatter Klassen implementieren die IRemotingFormatter -Schnittstelle zur Unterstützung von Remoteprozeduraufrufen (RPC), und die IFormatter Schnittstelle (geerbt von der IRemotingFormatter) zur Unterstützung der Serialisierung ein Objektdiagramm.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. Die SoapFormatter -Klasse unterstützt außerdem RPCs mit ISoapMessage Objekte, ohne die IRemotingFormatter Funktionalität.The SoapFormatter class also supports RPCs with ISoapMessage objects, without using the IRemotingFormatter functionality.

Bei RPCs die IRemotingFormatter Schnittstelle ermöglicht die Angabe zweier separater Objektdiagramme: das Diagramm von zu serialisierenden Objekten sowie ein zusätzliches Diagramm angezeigt, die ein Array von Headerobjekten enthält, die Informationen über die Remotefunktionsaufruf (für übermitteln b. Transaktions-ID oder Signatur einer Methode).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).

RPCs, mit denen die BinaryFormatter separate in zwei Teile: Methodenaufrufe, die an den Server mit dem Remoteobjekt, die die aufgerufene Methode enthält gesendet werden, und die Methodenantworten, die vom Server, an den Client mit dem Status gesendet werden und die Antwort Informationen aus der aufgerufenen Methode.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.

Während der Serialisierung eines Methodenaufrufs muss das erste Objekt des Objektdiagramms unterstützen die IMethodCallMessage Schnittstelle.During serialization of a method call the first object of the object graph must support the IMethodCallMessage interface. Verwenden Sie zum Deserialisieren eines Methodenaufrufs die Deserialize -Methode mit dem HeaderHandler Parameter.To deserialize a method call, use the Deserialize method with the HeaderHandler parameter. Die Remoteinfrastruktur verwendet die HeaderHandler Delegat, der ein Objekt zu erstellen, die unterstützt die ISerializable Schnittstelle.The remoting infrastructure uses the HeaderHandler delegate to produce an object that supports the ISerializable interface. Wenn die BinaryFormatter Ruft die HeaderHandler Delegaten wird den URI des Remoteobjekts, mit der Methode, die aufgerufen wird.When the BinaryFormatter invokes the HeaderHandler delegate, it returns the URI of the remote object with the method that is being called. Das erste Objekt in das Diagramm zurückgegeben unterstützt die IMethodCallMessage Schnittstelle.The first object in the graph returned supports the IMethodCallMessage interface.

Die Serialisierung-Prozedur für eine Methodenantwort ist identisch mit dem der Aufruf einer Methode, außer das erste Objekt des Objekts muss Graph unterstützt die IMethodReturnMessage Schnittstelle.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. Verwenden Sie zum Deserialisieren Methodenantwort der DeserializeMethodResponse Methode.To deserialize a method response, use the DeserializeMethodResponse method. Um Zeit zu sparen, werden Details über das aufrufende Objekt nicht an das Remoteobjekt während des Methodenaufrufs gesendet werden.To save time, details about the caller object are not sent to the remote object during the method call. Diese Informationen erhalten Sie stattdessen ursprünglichen Aufruf der Methode, die an die DeserializeMethodResponse -Methode in der die IMethodCallMessage Parameter.These details are instead obtained from the original method call, which is passed to the DeserializeMethodResponse method in the IMethodCallMessage parameter. Das erste Objekt in das Diagramm, das zurückgegeben werden, indem die DeserializeMethodResponse -Methode unterstützt die IMethodReturnMessage Schnittstelle.The first object in the graph returned by the DeserializeMethodResponse method supports the IMethodReturnMessage interface.

Wichtig

Mit binärer Serialisierung, um nicht vertrauenswürdige Daten zu deserialisieren, kann zu Sicherheitsrisiken führen.Using binary serialization to deserialize untrusted data can lead to security risks. Weitere Informationen finden Sie unter Data Validation (Datenüberprüfung).For more information, see Data Validation.

ErsatzzeichenUnpaired Surrogates

Alle nicht Gepaartes Ersatzzeichen-Zeichen werden bei der binären Serialisierung verloren.Any unpaired surrogate characters are lost in binary serialization. Beispielsweise enthält die folgende Zeichenfolge ein hohes Ersatzzeichen-Unicode-Zeichen (\ud800) zwischen den beiden Test Wörter:For example, the following string contains a high surrogate Unicode character (\ud800) in between the two Test words:

Test\ud800Test

Vor der Serialisierung ist das Bytearray der Zeichenfolge wie folgt:Before serialization, the byte array of the string is as follows:

Byte-Array-WertByte Array Value ZeichenCharacter
8484 TT
101101 ee
115115 ss
116116 tt
5529655296 \ud800\ud800
8484 TT
101101 ee
115115 ss
116116 tt

Nach der Deserialisierung bleibt das hohe Ersatzzeichen-Unicode-Zeichen:After deserialization, the high surrogate Unicode character is lost:

Byte-Array-WertByte Array Value ZeichenCharacter
8484 TT
101101 ee
115115 ss
116116 tt
8484 TT
101101 ee
115115 ss
116116 tt

Konstruktoren

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

Initialisiert eine neue Instanz der BinaryFormatter-Klasse mit Standardwerten.Initializes a new instance of the BinaryFormatter class with default values.

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

Initialisiert eine neue Instanz der BinaryFormatter-Klasse mit einer angegebenen Surrogatauswahl und angegebenem Streamingkontext.Initializes a new instance of the BinaryFormatter class with a given surrogate selector and streaming context.

Eigenschaften

AssemblyFormat AssemblyFormat AssemblyFormat AssemblyFormat

Ruft das Verhalten des Deserialisierungsprogramms bezüglich des Suchens und Ladens von Assemblys ab oder legt dieses fest.Gets or sets the behavior of the deserializer with regards to finding and loading assemblies.

Binder Binder Binder Binder

Ruft ein Objekt vom Typ SerializationBinder ab, das die Bindung eines serialisierten Objekts an einen Typ steuert, oder legt dieses fest.Gets or sets an object of type SerializationBinder that controls the binding of a serialized object to a type.

Context Context Context Context

Ruft den StreamingContext für dieses Formatierungsprogramm ab oder legt diesen fest.Gets or sets the StreamingContext for this formatter.

FilterLevel FilterLevel FilterLevel FilterLevel

Ruft das TypeFilterLevel der automatischen Deserialisierung ab, das vom BinaryFormatter ausgeführt wird, oder legt dieses fest.Gets or sets the TypeFilterLevel of automatic deserialization the BinaryFormatter performs.

SurrogateSelector SurrogateSelector SurrogateSelector SurrogateSelector

Ruft den ISurrogateSelector ab, der die Typersetzung während der Serialisierung und Deserialisierung steuert, oder legt diesen fest.Gets or sets a ISurrogateSelector that controls type substitution during serialization and deserialization.

TypeFormat TypeFormat TypeFormat TypeFormat

Ruft das Format für das Layout von Typbeschreibungen im serialisierten Stream ab oder legt dieses fest.Gets or sets the format in which type descriptions are laid out in the serialized stream.

Methoden

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

Deserialisiert den angegebenen Stream in ein Objektdiagramm.Deserializes the specified stream into an object graph.

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

Deserialisiert den angegebenen Stream in ein Objektdiagramm.Deserializes the specified stream into an object graph. Der bereitgestellte HeaderHandler behandelt sämtliche Header in diesem Stream.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)

Deserialisiert eine Antwort auf einen Remotemethodenaufruf aus dem bereitgestellten Stream.Deserializes a response to a remote method call from the provided Stream.

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

Bestimmt, ob das angegebene Objekt mit dem aktuellen Objekt identisch ist.Determines whether the specified object is equal to the current object.

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

Fungiert als Standardhashfunktion.Serves as the default hash function.

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

Ruft den Type der aktuellen Instanz ab.Gets the Type of the current instance.

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

Erstellt eine flache Kopie des aktuellen Object.Creates a shallow copy of the current Object.

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

Serialisiert das Objekt oder das Objektdiagramm mit dem angegebenen obersten Element (Stamm) in den angegebenen Stream.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[])

Serialisiert das Objekt bzw. das Objektdiagramm mit dem angegebenen obersten Element (Stamm) in den angegebenen Stream, wobei die bereitgestellten Header angefügt werden.Serializes the object, or graph of objects with the specified top (root), to the given stream attaching the provided headers.

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

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.Returns a string that represents the current object.

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

Deserialisiert den angegebenen Stream in ein Objektdiagramm.Deserializes the specified stream into an object graph. Der bereitgestellte HeaderHandler behandelt sämtliche Header in diesem Stream.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)

Deserialisiert eine Antwort auf einen Remotemethodenaufruf aus dem bereitgestellten Stream.Deserializes a response to a remote method call from the provided Stream.

Gilt für: