Condividi tramite


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

Nota

A partire da .NET Framework 2.0, questa classe è obsoleta.

Avviso

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 per supportare chiamate di routine remote e l'interfaccia (ereditata da IRemotingFormatter) per supportare la IRemotingFormatterIFormatter serializzazione di un grafico di oggetti. La SoapFormatter classe supporta anche i controller di rete con ISoapMessage oggetti, senza usare la IRemotingFormatter funzionalità.

Durante i 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 di intestazione che forniscono informazioni sulla chiamata di funzione remota, ad esempio l'ID transazione o una firma del metodo. Per la serializzazione corretta, l'oggetto radice del primo grafico deve essere un oggetto che implementa l'interfaccia o l'interfaccia IMethodCallMessageIMethodReturnMessage .

Durante la Deserialize deserializzazione di un RPC, viene specificato un HeaderHandler delegato al metodo del formattatore. L'infrastruttura di comunicazione 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.

È SoapFormatter anche possibile gestire i controller di rete prodotti con oggetti che implementano l'interfaccia ISoapMessage . Per creare un RPC senza usare la IRemotingFormatter funzionalità, posizionare un oggetto che supporta l'interfaccia ISoapMessage nella radice di un grafico serializzato. 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 di chiamata remota pertinenti.

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

Costruttori

SoapFormatter()

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

SoapFormatter(ISurrogateSelector, StreamingContext)

Inizializza una nuova istanza della classe SoapFormatter con gli oggetti ISurrogateSelector e StreamingContext specificati.

Proprietà

AssemblyFormat

Ottiene o imposta il comportamento del deserializzatore relativamente al reperire e caricare assembly.

Binder

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

Context

Ottiene o imposta l'oggetto StreamingContext utilizzato con l'oggetto SoapFormatter corrente.

FilterLevel

Ottiene o imposta l'oggetto TypeFilterLevel di deserializzazione automatica per i servizi remoti di .NET Framework.

SurrogateSelector

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

TopObject

Ottiene o imposta l'oggetto ISoapMessage in cui l'oggetto SOAP di primo livello viene deserializzato.

TypeFormat

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

Metodi

Deserialize(Stream)

Deserializza i dati del flusso indicato e ricostituisce il grafico degli oggetti.

Deserialize(Stream, HeaderHandler)

Deserializza il flusso in un grafico di oggetti; con le intestazioni del flusso gestite dall'oggetto HeaderHandler specificato.

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 l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
Serialize(Stream, Object)

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

Serialize(Stream, Object, Header[])

Serializza un oggetto o un grafico di oggetti con la radice specificata nell'oggetto Stream indicato utilizzando il formato RPC (Remote Procedure Call) SOAP.

ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Si applica a