Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Clase SoapFormatter

 

Publicado: noviembre de 2016

Serializa y deserializa un objeto o todo un grafo de objetos conectados, en formato SOAP.

Espacio de nombres:   System.Runtime.Serialization.Formatters.Soap
Ensamblado:  System.Runtime.Serialization.Formatters.Soap (en System.Runtime.Serialization.Formatters.Soap.dll)

System.Object
  System.Runtime.Serialization.Formatters.Soap.SoapFormatter

public sealed class SoapFormatter : IRemotingFormatter, IFormatter

NombreDescripción
System_CAPS_pubmethodSoapFormatter()

Inicializa una nueva instancia de la clase SoapFormatter con los valores de propiedad predeterminados.

System_CAPS_pubmethodSoapFormatter(ISurrogateSelector, StreamingContext)

Inicializa una nueva instancia de la clase SoapFormatter con los parámetros ISurrogateSelector y StreamingContext especificados.

NombreDescripción
System_CAPS_pubpropertyAssemblyFormat

Obtiene o establece el comportamiento del deserializador en lo que respecta a buscar y cargar los ensamblados.

System_CAPS_pubpropertyBinder

Obtiene o establece el SerializationBinder que controla el enlace entre un objeto serializado a un tipo.

System_CAPS_pubpropertyContext

Obtiene o establece el StreamingContext utilizado con este SoapFormatter.

System_CAPS_pubpropertyFilterLevel

Obtiene o establece la TypeFilterLevel de deserialización automática para .NET Framework remoting.

System_CAPS_pubpropertySurrogateSelector

Obtiene o establece el SurrogateSelector que controla la sustitución durante la serialización y deserialización de tipos.

System_CAPS_pubpropertyTopObject

Obtiene o establece la ISoapMessage en la que se deserializa el objeto SOAP superior.

System_CAPS_pubpropertyTypeFormat

Obtiene o establece el formato en el que se distribuyen las descripciones de tipo en la secuencia serializada.

NombreDescripción
System_CAPS_pubmethodDeserialize(Stream)

Deserializa los datos de la secuencia suministrada y reconstituye el gráfico de objetos.

System_CAPS_pubmethodDeserialize(Stream, HeaderHandler)

Deserializa la secuencia a un gráfico de objetos con los encabezados de dicha secuencia controlando el determinado HeaderHandler.

System_CAPS_pubmethodEquals(Object)

Determina si el objeto especificado es igual al objeto actual.(Heredado de Object).

System_CAPS_pubmethodGetHashCode()

Sirve como la función hash predeterminada.(Heredado de Object).

System_CAPS_pubmethodGetType()

Obtiene el Type de la instancia actual.(Heredado de Object).

System_CAPS_pubmethodSerialize(Stream, Object)

Serializa un objeto o un gráfico de objetos con la raíz especificada para el determinado Stream.

System_CAPS_pubmethodSerialize(Stream, Object, Header[])

Serializa un objeto o un gráfico de objetos con la raíz especificada para el determinado Stream en el formato de llamada a procedimiento remoto (RPC) de SOAP.

System_CAPS_pubmethodToString()

Devuelve una cadena que representa al objeto actual. (Heredado de Object).

System_CAPS_noteNota

A partir de .NET Framework 2.0, esta clase está obsoleta. Utilice BinaryFormatter en su lugar.

El SoapFormatter y BinaryFormatter clases implementan la IRemotingFormatter interfaz para admitir llamadas a procedimiento remoto (RPC) y el IFormatter interfaz (heredada por la IRemotingFormatter) para admitir la serialización de un gráfico de objetos. La SoapFormatter clase también admite llamadas RPC con ISoapMessage objetos sin utilizar la IRemotingFormatter funcionalidad.

Durante las llamadas RPC, el IRemotingFormatter interfaz permite la especificación de dos gráficos de objetos diferentes: el gráfico de objetos que se va a serializar y un gráfico adicional que contiene una matriz de objetos de encabezado que transmiten información sobre la llamada de función remota (por ejemplo, Id. de transacción o una firma de método). Para la serialización sea correcta, el objeto raíz del primer gráfico debe ser un objeto que implementa el IMethodCallMessage interfaz o IMethodReturnMessage interfaz.

Durante la deserialización de una RPC, un HeaderHandler delegado se especifica para el Deserialize método del formateador. La infraestructura de comunicación remota utiliza la HeaderHandler delegado que se va a crear un objeto que admite el ISerializable interfaz. Este objeto contiene la información almacenada en los encabezados y se convierte en la raíz del gráfico devuelto por el deserializador.

El SoapFormatter también puede controlar las llamadas RPC generadas con objetos que implementan la ISoapMessage interfaz. Para crear una llamada RPC sin utilizar la IRemotingFormatter funcionalidad, coloque un objeto que admite el ISoapMessage interfaz en la raíz del gráfico que se va a serializar. Para deserializar una llamada RPC creada de esta manera el TopObject propiedad debe establecerse en otro objeto que admita la ISoapMessage interfaz y contiene la información de la llamada remota relevantes.

Objetos TimeSpan se serializan según el estándar ISO 8601:1998 sección 5.5.3.2.1 "Alternativa".

El SoapFormatter no admite la compatibilidad de serialización entre las versiones de .NET Framework. Se produce un error en la serialización entre los tipos de las versiones 1.1 y 2.0 de Framework con frecuencia. Las siguientes acciones se pueden seguir para solucionar este problema:

  • Convertir para utilizar la BinaryFormatter, que proporciona compatibilidad entre 1.1 y 2.0.

  • Convertir los datos conservados existentes al nuevo formato.

  • Convertir todos los productores y consumidores de datos serializados a la versión 2.0.

  • Evite usar tipos que han cambiado de la versión 1.1 a 2.0.

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);
        }
    }
}

.NET Framework
Disponible desde 1.1

Cualquier miembro ( Compartido en Visual Basic) estático público de este tipo es seguro para subprocesos. No se garantiza que los miembros de instancia sean seguros para subprocesos.

Volver al principio
Mostrar: