SoapFormatter Classe

Definizione

Serializza e deserializza un oggetto o un intero grafico di oggetti connessi in formato SOAP.

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
Ereditarietà
SoapFormatter
Implementazioni

Esempio

#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

Commenti

Note

Questa classe è obsoleta.

Avvertimento

BinaryFormatter non è sicuro e non può essere reso sicuro. Per altre informazioni, vedere la guida alla sicurezza BinaryFormatter.

Le SoapFormatter classi e BinaryFormatter implementano l'interfaccia IRemotingFormatter per supportare le chiamate di routine remota e l'interfaccia IFormatter (ereditata da ) per supportare la IRemotingFormatterserializzazione di un grafico di oggetti. La SoapFormatter classe supporta anche rpc con ISoapMessage oggetti , senza usare la IRemotingFormatter funzionalità .

Durante le rpc, l'interfaccia IRemotingFormatter consente la specifica di due grafici a oggetti separati: il grafico degli oggetti da serializzare e un grafico aggiuntivo che contiene una matrice di oggetti intestazione che contengono informazioni sulla chiamata di funzione remota (ad esempio, ID transazione o firma del metodo). Per una serializzazione corretta, l'oggetto radice del primo grafico deve essere un oggetto che implementa l'interfaccia IMethodCallMessage o l'interfaccia IMethodReturnMessage .

Durante la deserializzazione di un RPC, viene specificato un HeaderHandler delegato al Deserialize metodo del formattatore. L'infrastruttura remota usa il HeaderHandler delegato per produrre un oggetto che supporta l'interfaccia ISerializable . Questo oggetto contiene le informazioni archiviate nelle intestazioni e diventa la radice del grafico restituito dal deserializzatore.

Può SoapFormatter anche gestire i CONTROLLER di dominio generati con oggetti che implementano l'interfaccia ISoapMessage . Per creare una RPC senza usare la IRemotingFormatter funzionalità, posizionare un oggetto che supporta l'interfaccia ISoapMessage nella radice di un grafico da serializzare. Per deserializzare un RPC creato in questo modo, la TopObject proprietà deve essere impostata su un altro oggetto che supporta l'interfaccia ISoapMessage e contiene le informazioni sulle chiamate remote pertinenti.

Gli oggetti TimeSpan vengono serializzati in base allo standard ISO 8601: 1998 sezione 5.5.3.2.1 "Alternativo".

Costruttori

Nome Descrizione
SoapFormatter()

Inizializza una nuova istanza della SoapFormatter classe con valori di proprietà predefiniti.

SoapFormatter(ISurrogateSelector, StreamingContext)

Inizializza una nuova istanza della SoapFormatter classe con l'oggetto e ISurrogateSelectorspecificatoStreamingContext.

Proprietà

Nome Descrizione
AssemblyFormat

Ottiene o imposta il comportamento del deserializzatore per quanto riguarda la ricerca e il caricamento di assembly.

Binder

Ottiene o imposta l'oggetto che controlla l'associazione SerializationBinder di un oggetto serializzato a un tipo.

Context

Ottiene o imposta l'oggetto StreamingContext utilizzato con questo SoapFormatteroggetto .

FilterLevel

Ottiene o imposta l'TypeFilterLevel della deserializzazione automatica per la comunicazione remota di .NET Framework.

SurrogateSelector

Ottiene o imposta l'oggetto che controlla la SurrogateSelector sostituzione dei tipi durante la serializzazione e la deserializzazione.

TopObject

Ottiene o imposta l'oggetto in cui viene deserializzato l'oggetto ISoapMessage principale SOAP.

TypeFormat

Ottiene o imposta il formato in cui sono disposte le descrizioni dei tipi nel flusso serializzato.

Metodi

Nome Descrizione
Deserialize(Stream, HeaderHandler)

Deserializza il flusso in un oggetto grafico con qualsiasi intestazione in tale flusso gestito dall'oggetto specificato HeaderHandler.

Deserialize(Stream)

Deserializza i dati nel flusso fornito e ricostituisce il grafico degli oggetti.

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetType()

Ottiene il Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale del Objectcorrente.

(Ereditato da Object)
Serialize(Stream, Object, Header[])

Serializza un oggetto o un grafico di oggetti con la radice specificata nel Stream formato RPC (Remote Procedure Call) SOAP.

Serialize(Stream, Object)

Serializza un oggetto o un grafico di oggetti con la radice specificata nell'oggetto specificato Stream.

ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Si applica a