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
Ce sujet n'a pas encore été évalué - Évaluez ce sujet

BinaryFormatter, classe

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

System.Object
  System.Runtime.Serialization.Formatters.Binary.BinaryFormatter

Espace de noms :  System.Runtime.Serialization.Formatters.Binary
Assembly :  mscorlib (dans mscorlib.dll)
[ComVisibleAttribute(true)]
public sealed class BinaryFormatter : IRemotingFormatter, 
	IFormatter

Le type BinaryFormatter expose les membres suivants.

  Nom Description
Méthode publique BinaryFormatter() Initialise une nouvelle instance de la classe BinaryFormatter avec des valeurs par défaut.
Méthode publique 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.
Début
  Nom Description
Propriété publique AssemblyFormat Obtient ou définit le comportement du désérialiseur par rapport à la recherche et au chargement d'assemblys.
Propriété publique Binder Obtient ou définit un objet de type SerializationBinder qui contrôle la liaison d'un objet sérialisé à un type.
Propriété publique Context Obtient ou définit StreamingContext pour ce formateur.
Propriété publique FilterLevel Obtient ou définit le TypeFilterLevel de la désérialisation automatique effectuée par BinaryFormatter.
Propriété publique SurrogateSelector Obtient ou définit un ISurrogateSelector qui contrôle la substitution de type pendant la sérialisation et la désérialisation.
Propriété publique TypeFormat Obtient ou définit le format dans lequel les descriptions de type sont disposées dans le flux sérialisé.
Début
  Nom Description
Méthode publique Deserialize(Stream) Désérialise le flux spécifié dans un graphique d'objets.
Méthode publique 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.
Méthode publique DeserializeMethodResponse Désérialise une réponse à un appel de méthode distant à partir du Stream fourni.
Méthode publique Equals(Object) Détermine si l'Object spécifié est égal à l'Object en cours. (Hérité de Object.)
Méthode protégée 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.)
Méthode publique GetHashCode Sert de fonction de hachage pour un type particulier. (Hérité de Object.)
Méthode publique GetType Obtient le Type de l'instance actuelle. (Hérité de Object.)
Méthode protégée MemberwiseClone Crée une copie superficielle de l'objet Object actif. (Hérité de Object.)
Méthode publique Serialize(Stream, Object) Sérialise l'objet ou le graphique d'objets avec l'objet supérieur (racine) spécifié vers le flux donné.
Méthode publique 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.
Méthode publique ToString Retourne une chaîne qui représente l'objet actuel. (Hérité de Object.)
Méthode publique 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.
Méthode publique UnsafeDeserializeMethodResponse Désérialise une réponse à un appel de méthode distant à partir du Stream fourni.
Début

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


.NET Framework

Pris en charge dans : 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Pris en charge dans : 4, 3.5 SP1

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.
Tous les membres static (Shared en Visual Basic) publics de ce type sont thread-safe. Il n'est pas garanti que les membres d'instance soient thread-safe.
Cela vous a-t-il été utile ?
(1500 caractères restants)
Contenu de la communauté Ajouter
Annotations FAQ