Exporter (0) Imprimer
Développer tout

SoapFormatter, classe

Sérialise et désérialise un objet ou l'intégralité d'un graphique d'objets connectés, au format SOAP.

Espace de noms : System.Runtime.Serialization.Formatters.Soap
Assembly : System.Runtime.Serialization.Formatters.Soap (dans system.runtime.serialization.formatters.soap.dll)

public sealed class SoapFormatter : IRemotingFormatter, IFormatter
public final class SoapFormatter implements IRemotingFormatter, IFormatter
public final class SoapFormatter implements IRemotingFormatter, IFormatter

Les classes SoapFormatter et BinaryFormatter implémentent l'interface IRemotingFormatter pour prendre en charge des appels de procédure distante (RPC, Remote Procedure Call) et l'interface IFormatter (héritée par IRemotingFormatter) pour prendre en charge la sérialisation d'un graphique d'objets. La classe SoapFormatter prend également en charge des appels de procédure distante avec des objets ISoapMessage, sans utiliser la fonctionnalité IRemotingFormatter.

Pendant les appels de procédure distante, l'interface IRemotingFormatter permet la spécification de deux graphiques d'objets distincts : le graphique d'objets à sérialiser et un graphique supplémentaire contenant un tableau d'objets d'en-tête transmettant des informations sur l'appel de fonction distant (par exemple, un ID de transaction ou une signature de méthode). Pour une sérialisation appropriée, l'objet racine du premier graphique doit être un objet qui implémente soit l'interface IMethodCallMessage, soit l'interface IMethodReturnMessage.

Pendant la désérialisation d'un appel de procédure distante, un délégué HeaderHandler est spécifié à la méthode Deserialize du formateur. L'infrastructure distante utilise le délégué HeaderHandler pour produire un objet qui prend en charge l'interface ISerializable. Cet objet contient les informations stockées dans les en-têtes et devient la racine du graphique retourné par le désérialiseur.

SoapFormatter peut également gérer des appels de procédure distante produits avec des objets qui implémentent l'interface ISoapMessage. Pour créer un appel de procédure distante sans utiliser la fonctionnalité IRemotingFormatter, placez un objet qui prend en charge l'interface ISoapMessage à la racine d'un graphique en cours de sérialisation. Pour désérialiser un appel de procédure distante créé de cette manière, la propriété TopObject doit être affectée à un autre objet qui prend en charge l'interface ISoapMessage et contient les informations d'appel distant appropriées.

Sérialisation TimeSpan

Les objets TimeSpan sont sérialisés en fonction de la norme ISO 8601 : 1998 section 5.5.3.2.1 "Alternative".

Informations de version

SoapFormatter ne prend pas en charge la compatibilité de sérialisation entre les versions du .NET Framework. La sérialisation entre les types des versions 1.1 et 2.0 dans le Framework échoue souvent. Vous pouvez prendre les mesures suivantes pour remédier à ce problème :

  • Effectuer une conversion pour utiliser BinaryFormatter, qui fournit la compatibilité entre 1.1 et 2.0.

  • Convertir les données persistantes existantes au nouveau format.

  • Convertir tous les producteurs et consommateurs de données sérialisées vers la version 2.0.

  • Éviter d'utiliser des types qui ont changé entre les versions 1.1 et 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);
        }
    }
}

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

class App
{
    /** @attribute STAThread()
     */
    public static void main(String[] args) throws SerializationException
    {
        Serialize();
        Deserialize();
    } //main

    static void Serialize() throws SerializationException
    {
        // 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.get_Message());
            throw e;
        }
        finally {
            fs.Close();
        }
    } //Serialize

    static void Deserialize() throws SerializationException
    {
        // 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.get_Message());
            throw e;
        }
        finally {
            fs.Close();
        }
        
        // To prove that the table deserialized correctly, 
        // display the key/value pairs to the console.
        IEnumerator myEnumerator = addresses.GetEnumerator();
        while (myEnumerator.MoveNext()) {
            DictionaryEntry de = (DictionaryEntry)myEnumerator.get_Current();
            Console.WriteLine("{0} lives at {1}.", de.get_Key(), 
                de.get_Value());
        }
    } //Deserialize
} //App

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

Les membres statiques publics (Shared en Visual Basic) de ce type sont thread-safe. Il n'est pas garanti que les membres d'instance soient thread-safe.

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Édition Media Center, Windows XP Professionnel Édition x64, Windows XP SP2, Windows XP Starter Edition

Le .NET Framework ne prend pas en charge toutes les versions de chaque plate-forme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise.

.NET Framework

Prise en charge dans : 2.0, 1.1, 1.0

Ajouts de la communauté

AJOUTER
Afficher:
© 2014 Microsoft