Lire en anglais

Partager via


NonSerializedAttribute Classe

Définition

Indique qu'un champ d'une classe sérialisable ne doit pas être sérialisé. Cette classe ne peut pas être héritée.

C#
[System.AttributeUsage(System.AttributeTargets.Field, Inherited=false)]
public sealed class NonSerializedAttribute : Attribute
C#
[System.AttributeUsage(System.AttributeTargets.Field, Inherited=true)]
public sealed class NonSerializedAttribute : Attribute
C#
[System.AttributeUsage(System.AttributeTargets.Field, Inherited=false)]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class NonSerializedAttribute : Attribute
Héritage
NonSerializedAttribute
Attributs

Exemples

L’exemple suivant illustre la sérialisation d’un objet marqué avec l’attribut SerializableAttribute et le comportement d’un champ marqué avec l’objet NonSerializedAttribute sérialisé.

Note

Le code utilise la SoapFormatter classe pour sérialiser l’objet. La classe se trouve dans le system.runtime.serialization.formatters.soap.dll, qui n’est pas chargée par défaut dans un projet. Pour exécuter le code, vous devez ajouter une référence à la DLL à votre projet.

C#
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Soap;
//using System.Runtime.Serialization.Formatters.Binary;

public class Test {
   public static void Main()  {

      // Creates a new TestSimpleObject object.
      TestSimpleObject obj = new TestSimpleObject();

      Console.WriteLine("Before serialization the object contains: ");
      obj.Print();

      // Opens a file and serializes the object into it in binary format.
      Stream stream = File.Open("data.xml", FileMode.Create);
      SoapFormatter formatter = new SoapFormatter();

      //BinaryFormatter formatter = new BinaryFormatter();

      formatter.Serialize(stream, obj);
      stream.Close();

      // Empties obj.
      obj = null;

      // Opens file "data.xml" and deserializes the object from it.
      stream = File.Open("data.xml", FileMode.Open);
      formatter = new SoapFormatter();

      //formatter = new BinaryFormatter();

      obj = (TestSimpleObject)formatter.Deserialize(stream);
      stream.Close();

      Console.WriteLine("");
      Console.WriteLine("After deserialization the object contains: ");
      obj.Print();
   }
}

// A test object that needs to be serialized.
[Serializable()]
public class TestSimpleObject  {

    public int member1;
    public string member2;
    public string member3;
    public double member4;

    // A field that is not serialized.
    [NonSerialized()] public string member5;

    public TestSimpleObject() {

        member1 = 11;
        member2 = "hello";
        member3 = "hello";
        member4 = 3.14159265;
        member5 = "hello world!";
    }

    public void Print() {

        Console.WriteLine("member1 = '{0}'", member1);
        Console.WriteLine("member2 = '{0}'", member2);
        Console.WriteLine("member3 = '{0}'", member3);
        Console.WriteLine("member4 = '{0}'", member4);
        Console.WriteLine("member5 = '{0}'", member5);
    }
}

Remarques

Lorsque vous utilisez ou BinaryFormatter SoapFormatter classe pour sérialiser un objet, utilisez l’attribut NonSerializedAttribute pour empêcher la sérialisation d’un champ. Par exemple, vous pouvez utiliser cet attribut pour empêcher la sérialisation des données sensibles.

Les objets cibles de l’attribut NonSerializedAttribute sont des champs publics et privés d’une classe sérialisable. Par défaut, les classes ne sont pas sérialisables, sauf si elles sont marquées avec SerializableAttribute. Pendant le processus de sérialisation, tous les champs publics et privés d’une classe sont sérialisés par défaut. Les champs marqués avec NonSerializedAttribute sont exclus lors de la sérialisation. Si vous utilisez la XmlSerializer classe pour sérialiser un objet, utilisez la XmlIgnoreAttribute classe pour obtenir la même fonctionnalité. Vous pouvez également implémenter l’interface ISerializable pour contrôler explicitement le processus de sérialisation. Notez que les classes qui implémentent ISerializable doivent toujours être marquées avec SerializableAttribute.

Pour appliquer la NonSerializedAttribute classe à un événement, définissez l’emplacement de l’attribut sur champ, comme indiqué dans le code C# suivant.

C#
[field:NonSerializedAttribute()]   
public event ChangedEventHandler Changed;  

Si un champ n’est pas sérialisé, mais qu’il nécessite toujours une valeur par défaut qui doit être fournie après la désérialisation, vous pouvez créer une méthode qui fournit le champ avec une valeur, puis l’appliquer OnDeserializedAttribute à la méthode.

Pour plus d’informations sur l’utilisation d’attributs, consultez Attributs.

Constructeurs

NonSerializedAttribute()

Initialise une nouvelle instance de la classe NonSerializedAttribute.

Propriétés

TypeId

Lors de l'implémentation dans une classe dérivée, obtient un identificateur unique pour l'objet Attribute.

(Hérité de Attribute)

Méthodes

Equals(Object)

Retourne une valeur qui indique si cette instance est égale à un objet spécifié.

(Hérité de Attribute)
GetHashCode()

Retourne le code de hachage de cette instance.

(Hérité de Attribute)
GetType()

Obtient le Type de l'instance actuelle.

(Hérité de Object)
IsDefaultAttribute()

En cas de substitution dans une classe dérivée, indique si la valeur de cette instance est la valeur par défaut pour la classe dérivée.

(Hérité de Attribute)
Match(Object)

En cas de substitution dans une classe dérivée, retourne une valeur indiquant si cette instance équivaut à un objet spécifié.

(Hérité de Attribute)
MemberwiseClone()

Crée une copie superficielle du Object actuel.

(Hérité de Object)
ToString()

Retourne une chaîne qui représente l'objet actuel.

(Hérité de Object)

Implémentations d’interfaces explicites

_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Mappe un jeu de noms avec un jeu correspondant d'identificateurs de dispatch.

(Hérité de Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Récupère les informations de type pour un objet, qui peuvent être utilisées pour obtenir les informations de type d'une interface.

(Hérité de Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Récupère le nombre d'interfaces d'informations de type fourni par un objet (0 ou 1).

(Hérité de Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Fournit l'accès aux propriétés et aux méthodes exposées par un objet.

(Hérité de Attribute)

S’applique à

Produit Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Standard 2.0, 2.1

Voir aussi