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.When applied to the member of a type, specifies that the member is part of a data contract and is serializable by the DataContractSerializer.

public ref class DataMemberAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Property, AllowMultiple=false, Inherited=false)]
public sealed class DataMemberAttribute : Attribute
type DataMemberAttribute = class
    inherit Attribute
Public NotInheritable Class DataMemberAttribute
Inherits Attribute
Héritage
DataMemberAttribute
Attributs

Exemples

L’exemple suivant montre un type auquel les attributs DataContractAttribute et DataMemberAttribute ont été appliqués.The following example shows a type to which the DataContractAttribute and DataMemberAttribute attributes have been applied. La propriété Name sur la DataMemberAttribute est définie sur « ID ».The Name property on the DataMemberAttribute is set to "ID".

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));
    }
}
Imports System.Collections
Imports System.IO
Imports System.Runtime.Serialization
Imports System.Xml

' You must apply a DataContractAttribute or SerializableAttribute
' to a class to have it serialized by the DataContractSerializer.
<DataContract()>  _
Class Person
    Implements IExtensibleDataObject

    Private LastNameValue As String
     
    ' Apply the DataMemberAttribute to fields (or properties) 
    ' that must be serialized.
    
    <DataMember()>  _
    Public FirstName As String
    
    <DataMember()>  _
    Public Property LastName() As String
        Get
            Return LastNameValue 
        End Get

        Set(ByVal Value As String)
           LastNameValue = Value
        End Set
    End Property

    
    <DataMember(Name:="ID")>  _
    Public IdNumber As Integer
    
    ' Note that you can apply the DataMemberAttribute to 
    ' a private field as well.
    <DataMember()>  _
    Private Secret As String
    
    Public Sub New(ByVal newfName As String, ByVal newLName As String, ByVal newIdNumber As Integer) 
        FirstName = newfName
        LastName = newLName
        IdNumber = newIdNumber
        Secret = newfName + newLName + newIdNumber.ToString()
    
    End Sub 
    
    ' The ExtensionData 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 
    ' IExtensibleObjectData interface.
    Private extensionDataValue As ExtensionDataObject
    
    Public Property ExtensionData() As ExtensionDataObject _
       Implements IExtensibleDataObject.ExtensionData
        Get
            Return extensionDataValue
        End Get
        Set
            extensionDataValue = value
        End Set
    End Property
End Class 

Public Class Test
    Public Shared Sub Main(ByVal args() As String) 
        Try
            ReadObject("DataMemberAttributeExample.xml")
            WriteObject("DataMemberAttributeExample.xml")
        Catch exc As Exception
            Console.WriteLine("The serialization operation failed: {0} StackTrace: {1}", _
            exc.Message, exc.StackTrace)
        Finally
            Console.WriteLine("Press <Enter> to exit....")
            Console.ReadLine()
        End Try
    End Sub 
    
    Public Shared Sub ReadObject(ByVal filename As String) 
        ' Create a new instance of the Person class.
        Dim p1 As New Person("Zighetti", "Barbara", 101)
        Dim writer As New FileStream(filename, FileMode.Create)
        Dim ser As New DataContractSerializer(GetType(Person))
        ser.WriteObject(writer, p1)
        writer.Close()
    End Sub 

    Public Shared Sub WriteObject(ByVal filename As String) 
        ' Deserialize an instance of the Person class 
        ' from an XML file.
        Dim fs As New FileStream(filename, FileMode.OpenOrCreate)
        Dim ser As New DataContractSerializer(getTYpe(Person))
        ' Deserialize the data and read it from the instance.
        Dim deserializedPerson As Person = ser.ReadObject(fs)
        fs.Close()
        Console.WriteLine(String.Format("{0} {1}, ID: {2}", _
        deserializedPerson.FirstName, deserializedPerson.LastName, deserializedPerson.IdNumber))
    End Sub 
End Class 

Remarques

Appliquez l'attribut DataMemberAttribute conjointement au DataContractAttribute pour identifier les membres d'un type qui font partie d'un contrat de données.Apply the DataMemberAttribute attribute in conjunction with the DataContractAttribute to identify members of a type that are part of a data contract. L'un des sérialiseurs qui peuvent sérialiser des contrats de données est le DataContractSerializer.One of the serializers that can serialize data contracts is the DataContractSerializer.

Le modèle de contrat de données est un modèle « d'abonnement ».The data contract model is an "opt-in" model. L'application du DataMemberAttribute à un champ ou à une propriété spécifie explicitement que la valeur de membre sera sérialisée.Applying the DataMemberAttribute to a field or property explicitly specifies that the member value will be serialized. Par opposition, le BinaryFormatter sérialise les champs publics et privés d'un type et le XmlSerializer sérialise uniquement les champs et propriétés publics d'un type.In contrast, the BinaryFormatter serializes public and private fields of a type, and the XmlSerializer serializes only public fields and properties of a type.

Attention

Vous pouvez appliquer le DataMemberAttribute aux champs ou propriétés privés.You can apply the DataMemberAttribute to private fields or properties. Sachez que les données retournées par le membre (même s’il est privé) seront sérialisées et désérialisées, et peuvent donc être affichées ou interceptées par un utilisateur ou un processus malveillant.Be aware that the data returned by the member (even if it's private) will be serialized and deserialized, and thus can be viewed or intercepted by a malicious user or process.

Par défaut, le nom du membre CLR est utilisé comme nom du membre de données.By default, the CLR member name is used as the name of the data member. En définissant la propriété Name, vous pouvez personnaliser le nom du membre de données.By setting the Name property, you can customize the name of the data member. Cette opération peut être utilisée pour fournir un nom qui ne peut pas être autorisé comme nom du membre CLR.This can be used to provide a name that may not be allowed as a CLR member name. Lors du mappage à XML à l'aide du DataContractSerializer, ce nom est utilisé comme nom de l'élément de schéma dans un type.When mapping to XML using the DataContractSerializer, this name is used as the name of the schema element in a type.

Notes

Les propriétés auxquelles l’attribut DataMemberAttribute a été appliqué doivent avoir des champs get et set.Properties to which the DataMemberAttribute attribute has been applied must have both get and set fields. Ils ne peuvent pas être getuniquement ou setuniquement.They cannot be get-only or set-only. Pour sérialiser une propriété qui doit rester getuniquement par conception (par exemple, une propriété qui retourne une collection), envisagez d’appliquer l' DataMemberAttribute au champ de stockage à la place.To serialize a property that should remain get-only by design (for example, a property that returns a collection), consider applying the DataMemberAttribute to the backing field instead.

Pour plus d’informations sur les contrats de données et les membres de données, consultez utilisation de contrats de données.For more information about data contracts and data members, see Using Data Contracts. Pour plus d’informations sur les noms de membres, consultez valeurs par défaut des membres de données.For more information about member names, see Data Member Default Values.

Constructeurs

DataMemberAttribute()

Initialise une nouvelle instance de la classe DataMemberAttribute.Initializes a new instance of the DataMemberAttribute class.

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é.Gets or sets a value that specifies whether to serialize the default value for a field or property being serialized.

IsNameSetExplicitly

Obtient l’information indiquant si Name a été défini explicitement.Gets whether Name has been explicitly set.

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.Gets or sets a value that instructs the serialization engine that the member must be present when reading or deserializing.

Name

Obtient ou définit un nom de membre de données.Gets or sets a data member name.

Order

Obtient ou définit l’ordre de sérialisation et de désérialisation d’un membre.Gets or sets the order of serialization and deserialization of a member.

TypeId

Lors de l'implémentation dans une classe dérivée, obtient un identificateur unique pour l'objet Attribute.When implemented in a derived class, gets a unique identifier for this Attribute.

(Hérité de Attribute)

Méthodes

Equals(Object)

Retourne une valeur qui indique si cette instance est égale à un objet spécifié.Returns a value that indicates whether this instance is equal to a specified object.

(Hérité de Attribute)
GetHashCode()

Retourne le code de hachage de cette instance.Returns the hash code for this instance.

(Hérité de Attribute)
GetType()

Obtient le Type de l'instance actuelle.Gets the Type of the current instance.

(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.When overridden in a derived class, indicates whether the value of this instance is the default value for the derived class.

(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é.When overridden in a derived class, returns a value that indicates whether this instance equals a specified object.

(Hérité de Attribute)
MemberwiseClone()

Crée une copie superficielle du Object actuel.Creates a shallow copy of the current Object.

(Hérité de Object)
ToString()

Retourne une chaîne qui représente l'objet en cours.Returns a string that represents the current object.

(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.Maps a set of names to a corresponding set of dispatch identifiers.

(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.Retrieves the type information for an object, which can be used to get the type information for an 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).Retrieves the number of type information interfaces that an object provides (either 0 or 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.Provides access to properties and methods exposed by an object.

(Hérité de Attribute)

S’applique à

Voir aussi