Afficher en anglais

Partage via


DataMemberAttribute Classe

Définition

Lors de l'application au membre d'un type, spécifie que le membre fait partie d'un contrat de données et qu'il est sérialisable par le DataContractSerializer.

C#
[System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Property, AllowMultiple=false, Inherited=false)]
public sealed class DataMemberAttribute : Attribute
Héritage
DataMemberAttribute
Attributs

Exemples

L’exemple suivant montre un type auquel les DataContractAttribute attributs et DataMemberAttribute ont été appliqués. La Name propriété sur le DataMemberAttribute est définie sur « ID ».

C#
using System;
using System.Collections;
using System.IO;
using System.Runtime.Serialization;
using System.Xml;

// You must apply a DataContractAttribute or SerializableAttribute
// to a class to have it serialized by the DataContractSerializer.
[DataContract()]
class Person : IExtensibleDataObject
{
    private string LastNameValue;
    // Apply the DataMemberAttribute to fields (or properties)
    // that must be serialized.
    [DataMember()]
    public string FirstName;

    [DataMember]
    public string LastName
    {
        get { return LastNameValue; }
        set { LastNameValue = value; }
    }

    [DataMember(Name = "ID")]
    public int IdNumber;

    // Note that you can apply the DataMemberAttribute to
    // a private field as well.
    [DataMember]
    private string Secret;

    public Person(string newfName, string newLName, int newIdNumber)
    {
        FirstName = newfName;
        LastName = newLName;
        IdNumber = newIdNumber;
        Secret = newfName + newLName + newIdNumber;
    }

    // The extensionDataValue field holds data from future versions
    // of the type.  This enables this type to be compatible with
    // future versions. The field is required to implement the
    // IExtensibleDataObject interface.

    private ExtensionDataObject extensionDatavalue;

    public ExtensionDataObject ExtensionData
    {
        get
        {
            return extensionDatavalue;
        }
        set
        {
            extensionDatavalue = value;
        }
    }
}

public class Test
{
    public static void Main(string[] args)
    {
        try
        {
            WriteObject(@"DataMemberAttributeExample.xml");
            ReadObject(@"DataMemberAttributeExample.xml");
        }
        catch (Exception exc)
        {
            Console.WriteLine(
            "The serialization operation failed: {0} StackTrace: {1}",
            exc.Message, exc.StackTrace);
        }
        finally
        {
            Console.WriteLine("Press <Enter> to exit....");
            Console.ReadLine();
        }
    }

    public static void WriteObject(string filename)
    {
        // Create a new instance of the Person class.
        Person p1 = new Person("Zighetti", "Barbara", 101);
        FileStream writer = new FileStream(filename,
        FileMode.OpenOrCreate);
        DataContractSerializer ser =
            new DataContractSerializer(typeof(Person));
        ser.WriteObject(writer, p1);
        writer.Close();
    }

    public static void ReadObject(string filename)
    {
        // Deserialize an instance of the Person class
        // from an XML file.
        FileStream fs = new FileStream(filename,
        FileMode.OpenOrCreate);
        DataContractSerializer ser =
            new DataContractSerializer(typeof(Person));
        // Deserialize the data and read it from the instance.
        Person deserializedPerson = (Person)ser.ReadObject(fs);
        fs.Close();
        Console.WriteLine(String.Format("{0} {1}, ID: {2}",
        deserializedPerson.FirstName, deserializedPerson.LastName,
        deserializedPerson.IdNumber));
    }
}

Remarques

Appliquez l'attribut DataMemberAttribute conjointement au DataContractAttribute pour identifier les membres d'un type qui font partie d'un contrat de données. L'un des sérialiseurs qui peuvent sérialiser des contrats de données est le DataContractSerializer.

Le modèle de contrat de données est un modèle « d'abonnement ». L'application du DataMemberAttribute à un champ ou à une propriété spécifie explicitement que la valeur de membre sera sérialisée. En revanche, sérialise XmlSerializer tous les champs publics et propriétés d’un type.

Précaution

Vous pouvez appliquer le DataMemberAttribute aux champs ou propriétés privés. N’oubliez pas que les données retournées par le membre (même si elles sont privées) seront sérialisées et désérialisées, et peuvent donc être consultées ou interceptées par un utilisateur ou un processus malveillant.

Par défaut, le nom du membre CLR est utilisé comme nom du membre de données. En définissant la propriété Name, vous pouvez personnaliser le nom du membre de données. Cette opération peut être utilisée pour fournir un nom qui ne peut pas être autorisé comme nom du membre CLR. Lors du mappage à XML à l'aide du DataContractSerializer, ce nom est utilisé comme nom de l'élément de schéma dans un type.

Remarque

Les propriétés auxquelles l’attribut DataMemberAttribute a été appliqué doivent comporter à la fois des get champs et set . Ils ne peuvent pas être get-seulement ou set-seulement. Pour sérialiser une propriété qui ne doit rester getque par conception (par exemple, une propriété qui retourne une collection), envisagez plutôt d’appliquer au DataMemberAttribute champ de stockage.

Pour plus d’informations sur les contrats de données et les membres de données, consultez Utilisation de contrats de données. Pour plus d’informations sur les noms de membres, consultez Valeurs par défaut des membres de données.

Constructeurs

DataMemberAttribute()

Initialise une nouvelle instance de la classe DataMemberAttribute.

Propriétés

EmitDefaultValue

Obtient ou définit une valeur qui spécifie s'il faut sérialiser la valeur par défaut pour une propriété ou un champ qui est sérialisé.

IsNameSetExplicitly

Obtient l’information indiquant si Name a été défini explicitement.

IsRequired

Obtient ou définit une valeur qui indique au moteur de sérialisation que le membre doit être présent lors de la lecture ou de la désérialisation.

Name

Obtient ou définit un nom de membre de données.

Order

Obtient ou définit l’ordre de sérialisation et de désérialisation d’un membre.

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, 8, 9, 10
.NET Framework 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, 4.8.1
.NET Standard 2.0, 2.1
UWP 10.0

Voir aussi