SoapFormatter Klasse

Definition

Serialisiert und deserialisiert ein Objekt oder ein vollständiges Diagramm verbundener Objekte im SOAP-Format.

public ref class SoapFormatter sealed : System::Runtime::Remoting::Messaging::IRemotingFormatter
public sealed class SoapFormatter : System.Runtime.Remoting.Messaging.IRemotingFormatter
type SoapFormatter = class
    interface IRemotingFormatter
    interface IFormatter
Public NotInheritable Class SoapFormatter
Implements IRemotingFormatter
Vererbung
SoapFormatter
Implementiert

Beispiele

#using <system.dll>
#using <system.runtime.serialization.formatters.soap.dll>

using namespace System;
using namespace System::IO;
using namespace System::Collections;
using namespace System::Runtime::Serialization;
using namespace System::Runtime::Serialization::Formatters::Soap;
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.
   // We will use a file stream here.
   FileStream^ fs = gcnew FileStream( "DataFile.soap",FileMode::Create );
   
   // Construct a SoapFormatter and use it 
   // to serialize the data to the stream.
   SoapFormatter^ formatter = gcnew SoapFormatter;
   try
   {
      formatter->Serialize( fs, addresses );
   }
   catch ( SerializationException^ e ) 
   {
      Console::WriteLine( "Failed to serialize. Reason: {0}", e->Message );
      throw;
   }
   finally
   {
      fs->Close();
   }

}

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.soap",FileMode::Open );
   try
   {
      SoapFormatter^ formatter = gcnew SoapFormatter;
      
      // 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 to the console.
   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()
{
   Serialize();
   Deserialize();
}
using System;
using System.IO;
using System.Collections;
using System.Runtime.Serialization;

// Note: When building this code, you must reference the
// System.Runtime.Serialization.Formatters.Soap.dll assembly.
using System.Runtime.Serialization.Formatters.Soap;

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.
        // Use a file stream here.
        FileStream fs = new FileStream("DataFile.soap", FileMode.Create);

        // Construct a SoapFormatter and use it
        // to serialize the data to the stream.
        SoapFormatter formatter = new SoapFormatter();
        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.soap", FileMode.Open);
        try
        {
            SoapFormatter formatter = new SoapFormatter();

            // 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 to the console.
        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

' Note: When building this code, you must reference the
' System.Runtime.Serialization.Formatters.Soap.dll assembly.
Imports System.Runtime.Serialization.Formatters.Soap


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.
      ' Use a file stream here.
      Dim fs As New FileStream("DataFile.soap", FileMode.Create)

      ' Construct a SoapFormatter and use it 
      ' to serialize the data to the stream.
      Dim formatter As New SoapFormatter
      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.soap", FileMode.Open)
      Try
         Dim formatter As New SoapFormatter

         ' 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 to the console.
      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

Hinweis

Ab .NET Framework 2,0 ist diese Klasse veraltet.

Warnung

BinaryFormatter ist unsicher und kann nicht sicher gemacht werden. Weitere Informationen finden Sie im BinaryFormatter-Sicherheitshandbuch.

Die SoapFormatter BinaryFormatter Klassen und implementieren die- IRemotingFormatter Schnittstelle zur Unterstützung von Remote Prozedur aufrufen (Remote Procedure Calls, RPCs) und die- IFormatter Schnittstelle (geerbt von IRemotingFormatter ) zur Unterstützung der Serialisierung eines Diagramms von Objekten. Die- SoapFormatter Klasse unterstützt auch RPCs mit- ISoapMessage Objekten, ohne die-Funktionalität zu verwenden IRemotingFormatter .

Bei RPCs ermöglicht die- IRemotingFormatter Schnittstelle die Angabe von zwei separaten Objekt Diagrammen: das Diagramm der zu serialisierenden Objekte und ein zusätzliches Diagramm, das ein Array von Header Objekten enthält, die Informationen über den Remote Funktionsaufruf übermitteln (z. b. Transaktions-ID oder eine Methoden Signatur). Bei einer ordnungsgemäßen Serialisierung muss das Stamm Objekt des ersten Diagramms ein Objekt sein, das entweder die- IMethodCallMessage Schnittstelle oder die- IMethodReturnMessage Schnittstelle implementiert.

Während der Deserialisierung eines RPC wird ein Delegat HeaderHandler für die- Deserialize Methode des Formatierers angegeben. Die Remoting-Infrastruktur verwendet den-Delegaten HeaderHandler zum Entwickeln eines Objekts, das die- ISerializable Schnittstelle unterstützt. Dieses Objekt enthält die in den Headern gespeicherten Informationen und wird zum Stamm des vom Deserialisierungsprogramm zurückgegebenen Diagramms.

Der SoapFormatter kann auch RPCs verarbeiten, die mit Objekten erstellt werden, die die- ISoapMessage Schnittstelle implementieren. Um einen RPC ohne Verwendung der- IRemotingFormatter Funktion zu erstellen, platzieren Sie ein Objekt, das die-Schnittstelle unterstützt, ISoapMessage im Stamm eines zu serialisierenden Diagramms. Zum Deserialisieren eines auf diese Weise erstellten RPC TopObject muss die-Eigenschaft auf ein anderes Objekt festgelegt werden, das die ISoapMessage -Schnittstelle unterstützt, und enthält die relevanten Remote Aufruf Informationen.

TimeSpan-Serialisierung

TimeSpan-Objekte werden gemäß dem ISO 8601:1998 section 5.5.3.2.1 "Alternative"-Standard serialisiert.

Versionsinformationen

SoapFormatterUnterstützt die Serialisierungskompatibilität zwischen den Versionen der .NET Framework nicht. Die Serialisierung zwischen den Typen 1,1 und 2,0 im Framework schlägt häufig fehl. Die folgenden Aktionen können ausgeführt werden, um dieses Problem zu beheben:

  • Konvertieren Sie, um den zu verwenden BinaryFormatter , der die Kompatibilität zwischen 1,1 und 2,0 bereitstellt.

  • Konvertieren Sie vorhandene persistente Daten in das neue Format.

  • Konvertieren Sie alle Producer und Consumer der serialisierten Daten in Version 2,0.

  • Vermeiden Sie die Verwendung von Typen, die von 1,1 zu 2,0 geändert wurden.

Konstruktoren

SoapFormatter()

Initialisiert eine neue Instanz der SoapFormatter-Klasse mit Standardeigenschaftswerten.

SoapFormatter(ISurrogateSelector, StreamingContext)

Initialisiert eine neue Instanz der SoapFormatter-Klasse mit den angegebenen ISurrogateSelector und dem angegebenen StreamingContext.

Eigenschaften

AssemblyFormat

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

Binder

Ruft den SerializationBinder ab, der die Bindung eines serialisierten Objekts an einen Typ steuert, oder legt diesen fest.

Context

Ruft den StreamingContext ab, der mit diesem SoapFormatter verwendet wird, oder legt diesen fest.

FilterLevel

Ruft das TypeFilterLevel der automatischen Deserialisierung für .NET Framework Remoting ab oder legt dieses fest.

SurrogateSelector

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

TopObject

Ruft die ISoapMessage ab, in die das oberste SOAP-Objekt deserialisiert wird, oder legt diese fest.

TypeFormat

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

Methoden

Deserialize(Stream)

Deserialisiert die Daten im bereitgestellten Stream und stellt das Diagramm von Objekten wieder her.

Deserialize(Stream, HeaderHandler)

Deserialisiert den Stream in ein Objektdiagramm, wobei sämtliche Header im betreffenden Stream durch den angegebenen HeaderHandler behandelt werden.

Equals(Object)

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

(Geerbt von Object)
GetHashCode()

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
Serialize(Stream, Object)

Serialisiert ein Objekt oder ein Objektdiagramm mit dem angegebenen Stamm in den angegebenen Stream.

Serialize(Stream, Object, Header[])

Serialisiert ein Objekt oder ein Objektdiagramm mit dem angegeben Stammobjekt im SOAP-RPC-Format (Remote Procedure Call, Remoteprozeduraufruf) in den angegebenen Stream.

ToString()

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

(Geerbt von Object)

Gilt für