Cet article a fait l'objet d'une traduction manuelle. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. |
Traduction
Source
|
SoapFormatter, classe
Sérialise et désérialise un objet ou l'intégralité d'un graphique d'objets connectés, au format SOAP.
Assembly : System.Runtime.Serialization.Formatters.Soap (dans System.Runtime.Serialization.Formatters.Soap.dll)
Le type SoapFormatter expose les membres suivants.
| Nom | Description | |
|---|---|---|
|
SoapFormatter() | Initialise une nouvelle instance de la classe SoapFormatter avec des valeurs de propriété par défaut. |
|
SoapFormatter(ISurrogateSelector, StreamingContext) | Initialise une nouvelle instance de la classe SoapFormatter avec les ISurrogateSelector et StreamingContext spécifiés. |
| Nom | Description | |
|---|---|---|
|
AssemblyFormat | Obtient ou définit le comportement du désérialiseur par rapport à la recherche et au chargement d'assemblys. |
|
Binder | Obtient ou définit le SerializationBinder qui contrôle la liaison d'un objet sérialisé à un type. |
|
Context | Obtient ou définit le StreamingContext utilisé avec ce SoapFormatter. |
|
FilterLevel | Obtient ou définit le TypeFilterLevel de la désérialisation automatique du .NET Framework Remoting. |
|
SurrogateSelector | Obtient ou définit le SurrogateSelector qui contrôle la substitution de types pendant la sérialisation et la désérialisation. |
|
TopObject | Obtient ou définit le ISoapMessage dans lequel l'objet SOAP supérieur est désérialisé. |
|
TypeFormat | Obtient ou définit le format dans lequel les descriptions de type sont disposées dans le flux sérialisé. |
| Nom | Description | |
|---|---|---|
|
Deserialize(Stream) | Désérialise les données sur le flux fourni et reconstitue le graphique d'objets. |
|
Deserialize(Stream, HeaderHandler) | Désérialise le flux dans un graphique d'objets, avec n'importe quel en-tête dans ce flux géré par le HeaderHandler donné. |
|
Equals(Object) | Détermine si l'Object spécifié est égal à l'Object en cours. (Hérité de Object.) |
|
Finalize | Autorise un objet à tenter de libérer des ressources et d'exécuter d'autres opérations de netto***ge avant qu'il ne soit récupéré par l'opération garbage collection. (Hérité de Object.) |
|
GetHashCode | Sert de fonction de hachage pour un type particulier. (Hérité de Object.) |
|
GetType | Obtient le Type de l'instance actuelle. (Hérité de Object.) |
|
MemberwiseClone | Crée une copie superficielle de l'objet Object actif. (Hérité de Object.) |
|
Serialize(Stream, Object) | Sérialise un objet ou un graphique d'objets avec la racine spécifiée vers le Stream donné. |
|
Serialize(Stream, Object, Header[]) | Sérialise un objet ou graphique d'objets avec la racine spécifiée vers le Stream donné dans le format d'appel de procédure distante SOAP. |
|
ToString | Retourne une chaîne qui représente l'objet actuel. (Hérité de Object.) |
Remarque
|
|---|
|
À partir de , cette classe est obsolète. Utilisez plutôt BinaryFormatter. |
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 de communication à distance 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 :
-
Effectuez une conversion pour utiliser BinaryFormatter, qui fournit la compatibilité entre 1.1 et 2.0.
-
Convertissez les données persistantes existantes au nouveau format.
-
Convertissez tous les producteurs et consommateurs de données sérialisées en 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); } } }
Windows 7, Windows Vista SP1 ou ultérieur, Windows XP SP3, Windows XP SP2 Édition x64, Windows Server 2008 (installation minimale non prise en charge), Windows Server 2008 R2 (installation minimale prise en charge avec SP1 ou version ultérieure), Windows Server 2003 SP2
Le .NET Framework ne prend pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.
Remarque