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
|
BinaryFormatter, classe
Sérialise et désérialise un objet ou l'intégralité d'un graphique d'objets connectés, au format binaire.
Assembly : mscorlib (dans mscorlib.dll)
Le type BinaryFormatter expose les membres suivants.
| Nom | Description | |
|---|---|---|
|
BinaryFormatter() | Initialise une nouvelle instance de la classe BinaryFormatter avec des valeurs par défaut. |
|
BinaryFormatter(ISurrogateSelector, StreamingContext) | Initialise une nouvelle instance de la classe BinaryFormatter avec un sélecteur de substitut et un contexte de diffusion en continu donné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 un objet de type SerializationBinder qui contrôle la liaison d'un objet sérialisé à un type. |
|
Context | Obtient ou définit StreamingContext pour ce formateur. |
|
FilterLevel | Obtient ou définit le TypeFilterLevel de la désérialisation automatique effectuée par BinaryFormatter. |
|
SurrogateSelector | Obtient ou définit un ISurrogateSelector qui contrôle la substitution de type pendant la sérialisation et la désérialisation. |
|
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 le flux spécifié dans un graphique d'objets. |
|
Deserialize(Stream, HeaderHandler) | Désérialise le flux spécifié dans un graphique d'objets. Le HeaderHandler fourni gère n'importe quel en-tête dans ce flux. |
|
DeserializeMethodResponse | Désérialise une réponse à un appel de méthode distant à partir du Stream fourni. |
|
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 l'objet ou le graphique d'objets avec l'objet supérieur (racine) spécifié vers le flux donné. |
|
Serialize(Stream, Object, Header[]) | Sérialise l'objet ou le graphique d'objets avec l'objet supérieur (racine) spécifié vers le flux donné en attachant les en-têtes fournis. |
|
ToString | Retourne une chaîne qui représente l'objet actuel. (Hérité de Object.) |
|
UnsafeDeserialize | Désérialise le flux spécifié dans un graphique d'objets. Le HeaderHandler fourni gère n'importe quel en-tête dans ce flux. |
|
UnsafeDeserializeMethodResponse | Désérialise une réponse à un appel de méthode distant à partir du Stream fourni. |
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).
Les appels de procédure distante qui utilisent BinaryFormatter se divisent en deux parties distinctes : les appels de méthode, envoyés au serveur avec l'objet distant contenant la méthode appelée et les réponses aux méthodes, envoyées à partir du serveur au client avec les informations sur l'état et la réponse provenant de la méthode appelée.
Pendant la sérialisation d'un appel de méthode, le premier objet du graphique d'objets doit prendre en charge l'interface IMethodCallMessage. Pour désérialiser un appel de méthode, utilisez la méthode Deserialize avec le paramètre HeaderHandler. L'infrastructure de communication à distance utilise le délégué HeaderHandler pour produire un objet qui prend en charge l'interface ISerializable. Lorsque BinaryFormatter appelle le délégué HeaderHandler, il retourne l'URI de l'objet distant avec la méthode appelée. Le premier objet du graphique retourné prend en charge l'interface IMethodCallMessage.
La procédure de sérialisation d'une réponse de méthode est identique à celle d'un appel de méthode, excepté que le premier objet du graphique d'objets doit prendre en charge l'interface IMethodReturnMessage. Pour désérialiser une réponse de méthode, utilisez la méthode DeserializeMethodResponse. Pour gagner du temps, les détails relatifs à l'objet appelant ne sont pas envoyés à l'objet distant pendant l'appel de la méthode. Ces détails sont plutôt obtenus à partir de l'appel de méthode d'origine, qui est passé à la méthode DeserializeMethodResponse dans le paramètre IMethodCallMessage. Le premier objet du graphique retourné par la méthode DeserializeMethodResponse prend en charge l'interface IMethodReturnMessage.
Substituts non couplés
Tous les caractères de substitution non couplés sont perdus dans la sérialisation binaire. Par exemple, la chaîne suivante contient un caractère Unicode étendu de substitution ((\ud800) entre les deux mots Test :
Test\ud800Test
Avant la sérialisation, le tableau d'octets de la chaîne se présente comme suit :
|
Valeur du tableau d'octets |
Caractère |
|---|---|
|
84 |
T |
|
101 |
e |
|
115 |
s |
|
116 |
t |
|
55296 |
\ud800 |
|
84 |
T |
|
101 |
e |
|
115 |
s |
|
116 |
t |
Après la désérialisation, le caractère Unicode étendu de substitution est perdu :
|
Valeur du tableau d'octets |
Caractère |
|---|---|
|
84 |
T |
|
101 |
e |
|
115 |
s |
|
116 |
t |
|
84 |
T |
|
101 |
e |
|
115 |
s |
|
116 |
t |
using System; using System.IO; using System.Collections; using System.Runtime.Serialization.Formatters.Binary; using System.Runtime.Serialization; public 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. // In this case, use a file stream. FileStream fs = new FileStream("DataFile.dat", FileMode.Create); // Construct a BinaryFormatter and use it to serialize the data to the stream. BinaryFormatter formatter = new BinaryFormatter(); 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.dat", FileMode.Open); try { BinaryFormatter formatter = new BinaryFormatter(); // 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. 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.