Exporter (0) Imprimer
Développer tout
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

ISerializable.GetObjectData, méthode

Remplit SerializationInfo avec les données nécessaires pour sérialiser l'objet cible.

Espace de noms :  System.Runtime.Serialization
Assembly :  mscorlib (dans mscorlib.dll)

void GetObjectData(
	SerializationInfo info,
	StreamingContext context
)

Paramètres

info
Type : System.Runtime.Serialization.SerializationInfo
SerializationInfo à remplir de données.
context
Type : System.Runtime.Serialization.StreamingContext
Destination (consultez StreamingContext) de cette sérialisation.

ExceptionCondition
SecurityException

L'appelant n'a pas l'autorisation requise.

Tout objet inclus dans SerializationInfo est automatiquement suivi et sérialisé par le formateur.

Du code appelant GetObjectData a besoin de SecurityPermission pour fournir des services de sérialisation. Énumération associée : SecurityPermissionFlag.SerializationFormatter.

RemarqueRemarque

Il n'est pas garanti que cette méthode sera appelée une seule fois par instance d'objet pendant la sérialisation. Par conséquent, la méthode doit être implémentée de telle sorte que son comportement soit le même quel que soit le nombre de fois où elle est appelée.

L'exemple suivant utilise la méthode GetObjectData pour définir d'autres valeurs pour un objet sérialisé. Le code utilise la méthode AddValue() de la classe SerializationInfo pour stocker les autres valeurs lorsque l'objet est sérialisé. Inversement, lorsque le constructeur de la classe Person est appelé pendant la désérialisation, les autres valeurs sont récupérées à l'aide de la méthode GetValue et réassignées aux champs de l'objet.


using System;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
using System.Security.Permissions;
using System.IO;

[assembly: SecurityPermission(
SecurityAction.RequestMinimum, Execution = true)]
namespace ISerializableExample
{
    class Program
    {
        public static void Main()
        {
            try
            {
                Run();
            }
            catch (Exception exc)
            {
                Console.WriteLine("{0}: {1}", exc.Message, exc.StackTrace);
            }
            finally
            {
                Console.WriteLine("Press Enter to exit....");
                Console.ReadLine();
            }
        }

        static void Run()
        {            
            BinaryFormatter binaryFmt = new BinaryFormatter();
            Person p = new Person();
            p.IdNumber = 1010;
            p.Name = "AAAAA";
            FileStream fs = new FileStream
                ("Person.xml", FileMode.OpenOrCreate);
            binaryFmt.Serialize(fs, p);
            fs.Close();
            Console.WriteLine
                ("Original Name: {0}, Original ID: {1}", p.Name, p.IdNumber);

            // Deserialize.
            fs = new FileStream
                ("Person.xml", FileMode.OpenOrCreate);
            Person p2 = (Person)binaryFmt.Deserialize(fs);
                Console.WriteLine("New Name: {0}, New ID: {1}", p2.Name, p2.IdNumber);
            fs.Close();
            }
        }
    [Serializable]
    public class Person : ISerializable
    {
        private string name_value;
        private int ID_value;

        public Person() { }
        protected Person(SerializationInfo info, StreamingContext context)
        {
            if (info == null)
                throw new System.ArgumentNullException("info");
            name_value = (string)info.GetValue("AltName", typeof(string));
            ID_value = (int)info.GetValue("AltID", typeof(int));
        }

        [SecurityPermission(SecurityAction.LinkDemand,
            Flags = SecurityPermissionFlag.SerializationFormatter)]
        public virtual void GetObjectData(
        SerializationInfo info, StreamingContext context)
        {
            if (info == null)
                throw new System.ArgumentNullException("info");
            info.AddValue("AltName", "XXX");
            info.AddValue("AltID", 9999);
        }

        public string Name
        {
            get { return name_value; }
            set { name_value = value; }
        }

        public int IdNumber
        {
            get { return ID_value; }
            set { ID_value = 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.

Ajouts de la communauté

AJOUTER
Microsoft réalise une enquête en ligne pour recueillir votre opinion sur le site Web de MSDN. Si vous choisissez d’y participer, cette enquête en ligne vous sera présentée lorsque vous quitterez le site Web de MSDN.

Si vous souhaitez y participer,
Afficher:
© 2014 Microsoft