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 Sicherheitsleitfaden für BinaryFormatter.

Die SoapFormatter Klassen und BinaryFormatter implementieren die IRemotingFormatter -Schnittstelle zur Unterstützung von Remoteprozeduraufrufen (Remote Procedure Calls, 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 rpCs ermöglicht die IRemotingFormatter -Schnittstelle die Spezifikation von zwei separaten Objektgraphen: des Graphen der zu serialisierenden Objekte und eines zusätzlichen Graphen, der ein Array von Headerobjekten enthält, die Informationen über den Remotefunktionsaufruf übermitteln (z. B. Transaktions-ID oder Methodensignatur). Für eine ordnungsgemäße Serialisierung muss das Stammobjekt des ersten Graphen ein Objekt sein, das entweder die IMethodCallMessage -Schnittstelle oder die IMethodReturnMessage -Schnittstelle implementiert.

Während der Deserialisierung eines RPC wird ein HeaderHandler Delegat für die Deserialize -Methode des Formatierers angegeben. Die Remotinginfrastruktur verwendet den HeaderHandler Delegaten, um ein Objekt zu erzeugen, das die ISerializable -Schnittstelle unterstützt. Dieses Objekt enthält die in den Headern gespeicherten Informationen und wird zum Stamm des vom Deserialisierer zurückgegebenen Graphen.

Der SoapFormatter kann auch RPCs verarbeiten, die mit -Objekten erstellt werden, die die ISoapMessage -Schnittstelle implementieren. Um einen RPC ohne Verwendung der IRemotingFormatter Funktionalität zu erstellen, platzieren Sie ein Objekt, das die ISoapMessage Schnittstelle unterstützt, am Stamm eines graphen, der serialisiert wird. Um einen auf diese Weise erstellten RPC zu deserialisieren, muss die TopObject -Eigenschaft auf ein anderes Objekt festgelegt werden, das die ISoapMessage Schnittstelle unterstützt und die relevanten Remoteaufrufinformationen enthält.

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

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: