BinaryFormatter Klasse

Definition

Achtung

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

Serialisiert und deserialisiert ein Objekt oder ein ganzes Diagramm verbundener Objekte im binären Format.

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
Vererbung
BinaryFormatter
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

Warnung

BinaryFormatter ist unsicher und kann nicht sicher gemacht werden. Weitere Informationen finden Sie im Sicherheitsleitfaden für BinaryFormatter.

Die SoapFormatter -Klasse und BinaryFormatter implementieren die IRemotingFormatter Schnittstelle zur Unterstützung von Remoteprozeduraufrufen (Remoteprozeduraufrufe, RPCs) und die IFormatter -Schnittstelle (geerbt von ), um die IRemotingFormatterSerialisierung eines Graphen von Objekten zu unterstützen. Die SoapFormatter -Klasse unterstützt auch RPCs mit ISoapMessage -Objekten, ohne die IRemotingFormatter Funktionalität zu verwenden.

Während der RPCs ermöglicht die IRemotingFormatter Schnittstelle die Spezifikation von zwei separaten Objektgraphen: das Diagramm der zu serialisierenden Objekte und ein zusätzliches Diagramm, das ein Array von Headerobjekten enthält, die Informationen über den Remotefunktionsaufruf übermitteln (z. B. Transaktions-ID oder Eine Methodensignatur).

RPCs, die die BinaryFormatter in zwei verschiedenen Teile verwenden: Methodenaufrufe, die mit dem Remoteobjekt, das die Methode enthält, an den Server gesendet werden, und Methodenantworten, die vom Server mit dem status und Antwortinformationen der aufgerufenen Methode an den Client gesendet werden.

Während der Serialisierung eines Methodenaufrufs muss das erste Objekt des Objektgraphen die IMethodCallMessage Schnittstelle unterstützen. Verwenden Sie zum Deserialisieren eines Methodenaufrufs die Deserialize -Methode mit dem HeaderHandler -Parameter. Die Remotinginfrastruktur verwendet den HeaderHandler Delegaten, um ein Objekt zu erstellen, das die ISerializable Schnittstelle unterstützt. Wenn der den BinaryFormatterHeaderHandler Delegaten aufruft, gibt er den URI des Remoteobjekts mit der methode zurück, die aufgerufen wird. Das erste Objekt im zurückgegebenen Diagramm unterstützt die IMethodCallMessage Schnittstelle.

Die Serialisierungsprozedur für eine Methodenantwort ist identisch mit der eines Methodenaufrufs, mit dem Unterschied, dass das erste Objekt des Objektdiagramms die IMethodReturnMessage Schnittstelle unterstützen muss. Verwenden Sie zum Deserialisieren einer Methodenantwort die DeserializeMethodResponse -Methode. Um Zeit zu sparen, werden während des Methodenaufrufs keine Details zum Aufrufobjekt des Aufrufers an das Remoteobjekt gesendet. Diese Details werden stattdessen aus dem ursprünglichen Methodenaufruf abgerufen, der im IMethodCallMessage -Parameter an die DeserializeMethodResponse -Methode übergeben wird. Das erste Objekt im Graphen, das von der -Methode zurückgegeben wird, DeserializeMethodResponse unterstützt die IMethodReturnMessage Schnittstelle.

Wichtig

Die Verwendung der binären Serialisierung zum Deserialisieren nicht vertrauenswürdiger Daten kann zu Sicherheitsrisiken führen. Weitere Informationen finden Sie unter Überprüfen aller Eingaben und im BinaryFormatter-Sicherheitshandbuch.

Unbezahlte Ersatzgatten

Alle unpaarten Ersatzzeichen gehen bei der binären Serialisierung verloren. Die folgende Zeichenfolge enthält z. B. zwischen den beiden Test Wörtern ein Unicode-Zeichen mit hohem Ersatzzeichen(\ud800:

Test\ud800Test

Vor der Serialisierung lautet das Bytearray der Zeichenfolge wie folgt:

Byte-Arraywert Zeichen
84 T
101 e
115 s
116 t
55296 \ud800
84 T
101 e
115 s
116 t

Nach der Deserialisierung geht das Unicode-Zeichen mit hoher Ersatzanzahl verloren:

Byte-Arraywert Zeichen
84 T
101 e
115 s
116 t
84 T
101 e
115 s
116 t

Konstruktoren

BinaryFormatter()
Veraltet.

Initialisiert eine neue Instanz der BinaryFormatter-Klasse mit Standardwerten.

BinaryFormatter(ISurrogateSelector, StreamingContext)
Veraltet.

Initialisiert eine neue Instanz der BinaryFormatter-Klasse mit einer angegebenen Surrogatauswahl und angegebenem Streamingkontext.

Eigenschaften

AssemblyFormat
Veraltet.

Ruft das Verhalten des Deserialisierungsprogramms bezüglich des Suchens und Ladens von Assemblys ab oder legt dieses fest.

Binder
Veraltet.

(Unsicher) Ruft ein Objekt vom Typ SerializationBinder ab, das die Bindung eines serialisierten Objekts an einen Typ steuert, oder legt dieses fest.

Context
Veraltet.

Ruft den StreamingContext für dieses Formatierungsprogramm ab oder legt diesen fest.

FilterLevel
Veraltet.

Ruft das TypeFilterLevel der automatischen Deserialisierung ab, das vom BinaryFormatter ausgeführt wird, oder legt dieses fest.

SurrogateSelector
Veraltet.

Ruft den ISurrogateSelector ab, der die Typersetzung während der Serialisierung und Deserialisierung steuert, oder legt diesen fest.

TypeFormat
Veraltet.

Ruft das Format für das Layout von Typbeschreibungen im serialisierten Stream ab oder legt dieses fest.

Methoden

Deserialize(Stream)
Veraltet.

Deserialisiert den angegebenen Stream in ein Objektdiagramm.

Deserialize(Stream, HeaderHandler)
Veraltet.

Deserialisiert den angegebenen Stream in ein Objektdiagramm. Der bereitgestellte HeaderHandler behandelt sämtliche Header in diesem Stream.

DeserializeMethodResponse(Stream, HeaderHandler, IMethodCallMessage)
Veraltet.

Deserialisiert eine Antwort auf einen Remotemethodenaufruf aus dem bereitgestellten Stream.

Equals(Object)
Veraltet.

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
GetHashCode()
Veraltet.

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetType()
Veraltet.

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
MemberwiseClone()
Veraltet.

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
Serialize(Stream, Object)
Veraltet.

Serialisiert das Objekt oder das Objektdiagramm mit dem angegebenen obersten Element (Stamm) in den angegebenen Stream.

Serialize(Stream, Object, Header[])
Veraltet.

Serialisiert das Objekt bzw. das Objektdiagramm mit dem angegebenen obersten Element (Stamm) in den angegebenen Stream, wobei die bereitgestellten Header angefügt werden.

ToString()
Veraltet.

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)
UnsafeDeserialize(Stream, HeaderHandler)
Veraltet.

Deserialisiert den angegebenen Stream in ein Objektdiagramm. Der bereitgestellte HeaderHandler behandelt sämtliche Header in diesem Stream.

UnsafeDeserializeMethodResponse(Stream, HeaderHandler, IMethodCallMessage)
Veraltet.

Deserialisiert eine Antwort auf einen Remotemethodenaufruf aus dem bereitgestellten Stream.

Gilt für: