BinaryFormatter Klasa

Definicja

Serializować i deserializacji obiektu lub całego wykresu połączonych obiektów w formacie binarnym.Serializes and deserializes an object, or an entire graph of connected objects, in binary 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
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
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
Dziedziczenie
BinaryFormatter
Atrybuty
Implementuje

Przykłady

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

Uwagi

Ostrzeżenie

BinaryFormatter jest niezabezpieczony i nie może być zabezpieczony.BinaryFormatter is insecure and can't be made secure. Aby uzyskać więcej informacji, zobacz Przewodnik po zabezpieczeniach BinaryFormatter.For more information, see the BinaryFormatter security guide.

SoapFormatterKlasy i BinaryFormatter implementują IRemotingFormatter interfejs do obsługi zdalnych wywołań procedur (RPC) i IFormatter interfejs (Dziedziczony przez IRemotingFormatter ) do obsługi serializacji grafu obiektów.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. SoapFormatterKlasa obsługuje również wywołania RPC z ISoapMessage obiektami, bez korzystania z tej IRemotingFormatter funkcji.The SoapFormatter class also supports RPCs with ISoapMessage objects, without using the IRemotingFormatter functionality.

Podczas zdalnych wywołań procedury IRemotingFormatter interfejs umożliwia specyfikację dwóch oddzielnych grafów obiektów: Graf obiektów do serializacji oraz dodatkowy wykres zawierający tablicę obiektów nagłówka przekazujących informacje o wywołaniu funkcji zdalnej (na przykład identyfikator transakcji lub podpis metody).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).

Zdalne wywołania procedury, które korzystają z BinaryFormatter oddzielnych części: wywołań metod, które są wysyłane do serwera z obiektem zdalnym zawierającym metodę o nazwie i odpowiedzi metod, które są wysyłane z serwera do klienta z informacjami o stanie i odpowiedzi z wywołanej metody.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.

Podczas serializacji wywołania metody pierwszy obiekt grafu obiektów musi obsługiwać IMethodCallMessage interfejs.During serialization of a method call the first object of the object graph must support the IMethodCallMessage interface. Aby zdeserializować wywołania metody, użyj Deserialize metody z HeaderHandler parametrem.To deserialize a method call, use the Deserialize method with the HeaderHandler parameter. Infrastruktura zdalna używa HeaderHandler delegata do tworzenia obiektu, który obsługuje ISerializable interfejs.The remoting infrastructure uses the HeaderHandler delegate to produce an object that supports the ISerializable interface. Gdy BinaryFormatter wywołuje HeaderHandler delegata, zwraca identyfikator URI obiektu zdalnego za pomocą metody, która jest wywoływana.When the BinaryFormatter invokes the HeaderHandler delegate, it returns the URI of the remote object with the method that is being called. Pierwszy obiekt na grafie zwraca obsługę IMethodCallMessage interfejsu.The first object in the graph returned supports the IMethodCallMessage interface.

Procedura serializacji odpowiedzi metody jest taka sama jak metoda wywołania metody, z wyjątkiem pierwszego obiektu grafu obiektów musi obsługiwać IMethodReturnMessage interfejs.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. Aby zdeserializować odpowiedzi metody, użyj DeserializeMethodResponse metody.To deserialize a method response, use the DeserializeMethodResponse method. Aby zaoszczędzić czas, szczegółowe informacje o obiekcie wywołującym nie są wysyłane do obiektu zdalnego podczas wywołania metody.To save time, details about the caller object are not sent to the remote object during the method call. Te szczegóły są uzyskiwane z oryginalnego wywołania metody, które jest przesyłane do DeserializeMethodResponse metody w IMethodCallMessage parametrze.These details are instead obtained from the original method call, which is passed to the DeserializeMethodResponse method in the IMethodCallMessage parameter. Pierwszy obiekt na grafie zwróconym przez DeserializeMethodResponse metodę obsługuje IMethodReturnMessage interfejs.The first object in the graph returned by the DeserializeMethodResponse method supports the IMethodReturnMessage interface.

Ważne

Użycie serializacji binarnej do deserializacji niezaufanych danych może prowadzić do zagrożeń bezpieczeństwa.Using binary serialization to deserialize untrusted data can lead to security risks. Aby uzyskać więcej informacji, zobacz Sprawdzanie poprawności danych i Przewodnik po zabezpieczeniach BinaryFormatter.For more information, see Data Validation and the BinaryFormatter security guide.

Niesparowane surogatyUnpaired Surrogates

Wszystkie niesparowane znaki dwuskładnikowe są tracone w serializacji binarnej.Any unpaired surrogate characters are lost in binary serialization. Na przykład następujący ciąg zawiera duży zastępczy znak Unicode (\ud800 ) między dwoma Test wyrazami:For example, the following string contains a high surrogate Unicode character (\ud800) in between the two Test words:

Test\ud800Test

Przed serializacji tablica bajtowa ciągu jest następująca:Before serialization, the byte array of the string is as follows:

Wartość tablicy bajtówByte Array Value ZnakCharacter
8484 TT
101101 ee
115115 ss
116116 tt
5529655296 \ud800\ud800
8484 TT
101101 ee
115115 ss
116116 tt

Po deserializacji jest tracony górny zastępczy znak Unicode:After deserialization, the high surrogate Unicode character is lost:

Wartość tablicy bajtówByte Array Value ZnakCharacter
8484 TT
101101 ee
115115 ss
116116 tt
8484 TT
101101 ee
115115 ss
116116 tt

Konstruktory

BinaryFormatter()

Inicjuje nowe wystąpienie klasy BinaryFormatter z domyślnymi wartościami.Initializes a new instance of the BinaryFormatter class with default values.

BinaryFormatter(ISurrogateSelector, StreamingContext)

Inicjuje nowe wystąpienie BinaryFormatter klasy z danym selektorem surogatu i kontekstem przesyłania strumieniowego.Initializes a new instance of the BinaryFormatter class with a given surrogate selector and streaming context.

Właściwości

AssemblyFormat

Pobiera lub ustawia zachowanie deserializacji w odniesieniu do znajdowania i ładowania zestawów.Gets or sets the behavior of the deserializer with regards to finding and loading assemblies.

Binder

Niezabezpieczone Pobiera lub ustawia obiekt typu SerializationBinder , który kontroluje powiązanie serializowanego obiektu z typem.(Insecure) Gets or sets an object of type SerializationBinder that controls the binding of a serialized object to a type.

Context

Pobiera lub ustawia StreamingContext dla tego programu formatującego.Gets or sets the StreamingContext for this formatter.

FilterLevel

Pobiera lub ustawia TypeFilterLevel automatyczną deserializacji BinaryFormatter wykonuje.Gets or sets the TypeFilterLevel of automatic deserialization the BinaryFormatter performs.

SurrogateSelector

Pobiera lub ustawia ISurrogateSelector Typ, który jest podstawiany podczas serializacji i deserializacji.Gets or sets a ISurrogateSelector that controls type substitution during serialization and deserialization.

TypeFormat

Pobiera lub ustawia format, w którym opisy typów są określane w serializowanym strumieniu.Gets or sets the format in which type descriptions are laid out in the serialized stream.

Metody

Deserialize(Stream)

Deserializacji określonego strumienia do grafu obiektów.Deserializes the specified stream into an object graph.

Deserialize(Stream, HeaderHandler)

Deserializacji określonego strumienia do grafu obiektów.Deserializes the specified stream into an object graph. Podane HeaderHandler obsługiwane są wszystkie nagłówki w tym strumieniu.The provided HeaderHandler handles any headers in that stream.

DeserializeMethodResponse(Stream, HeaderHandler, IMethodCallMessage)

Deserializacji odpowiedzi na wywołanie metody zdalnej z podanego elementu Stream .Deserializes a response to a remote method call from the provided Stream.

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.Determines whether the specified object is equal to the current object.

(Odziedziczone po Object)
GetHashCode()

Służy jako domyślna funkcja skrótu.Serves as the default hash function.

(Odziedziczone po Object)
GetType()

Pobiera Type bieżące wystąpienie.Gets the Type of the current instance.

(Odziedziczone po Object)
MemberwiseClone()

Tworzy skróconą kopię bieżącego elementu Object .Creates a shallow copy of the current Object.

(Odziedziczone po Object)
Serialize(Stream, Object)

Serializować obiekt lub Graf obiektów z określoną górną (główną) do danego strumienia.Serializes the object, or graph of objects with the specified top (root), to the given stream.

Serialize(Stream, Object, Header[])

Serializować obiekt lub Graf obiektów z określoną górną (główną) do danego strumienia, dołączając podane nagłówki.Serializes the object, or graph of objects with the specified top (root), to the given stream attaching the provided headers.

ToString()

Zwraca ciąg reprezentujący bieżący obiekt.Returns a string that represents the current object.

(Odziedziczone po Object)
UnsafeDeserialize(Stream, HeaderHandler)

Deserializacji określonego strumienia do grafu obiektów.Deserializes the specified stream into an object graph. Podane HeaderHandler obsługiwane są wszystkie nagłówki w tym strumieniu.The provided HeaderHandler handles any headers in that stream.

UnsafeDeserializeMethodResponse(Stream, HeaderHandler, IMethodCallMessage)

Deserializacji odpowiedzi na wywołanie metody zdalnej z podanego elementu Stream .Deserializes a response to a remote method call from the provided Stream.

Dotyczy