DataMemberAttribute Klasa

Definicja

W przypadku zastosowania do elementu członkowskiego typu, określa, że element członkowski jest częścią kontraktu danych i jest możliwy do serializacji przez 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
[<System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Property, AllowMultiple=false, Inherited=false)>]
type DataMemberAttribute = class
    inherit Attribute
Public NotInheritable Class DataMemberAttribute
Inherits Attribute
Dziedziczenie
DataMemberAttribute
Atrybuty

Przykłady

W poniższym przykładzie przedstawiono typ, do którego DataContractAttribute DataMemberAttribute zastosowano atrybuty i.The following example shows a type to which the DataContractAttribute and DataMemberAttribute attributes have been applied. NameWłaściwość w DataMemberAttribute jest ustawiona na wartość "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 

Uwagi

Zastosuj DataMemberAttribute atrybut w połączeniu z, DataContractAttribute Aby zidentyfikować członków typu, który jest częścią kontraktu danych.Apply the DataMemberAttribute attribute in conjunction with the DataContractAttribute to identify members of a type that are part of a data contract. Jednym z serializatorów, które mogą serializować Kontrakty danych, jest DataContractSerializer .One of the serializers that can serialize data contracts is the DataContractSerializer.

Model kontraktu danych jest modelem "opt-in".The data contract model is an "opt-in" model. Zastosowanie DataMemberAttribute do pola lub właściwości jawnie określa, że wartość elementu członkowskiego zostanie zserializowana.Applying the DataMemberAttribute to a field or property explicitly specifies that the member value will be serialized. W przeciwieństwie, BinaryFormatter serializować pola publiczne i prywatne typu oraz XmlSerializer serializacji tylko pola publiczne i właściwości typu.In contrast, the BinaryFormatter serializes public and private fields of a type, and the XmlSerializer serializes only public fields and properties of a type.

Przestroga

Można zastosować DataMemberAttribute do prywatnych pól lub właściwości.You can apply the DataMemberAttribute to private fields or properties. Należy pamiętać, że dane zwrócone przez element członkowski (nawet jeśli są prywatne) będą serializowane i deserializowane, a tym samym można je wyświetlić lub przechwycić przez złośliwego użytkownika lub proces.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.

Domyślnie nazwa elementu członkowskiego CLR jest używana jako nazwa elementu członkowskiego danych.By default, the CLR member name is used as the name of the data member. Ustawiając Name Właściwość, można dostosować nazwę elementu członkowskiego danych.By setting the Name property, you can customize the name of the data member. Może to służyć do podania nazwy, która może nie być dozwolona jako nazwa elementu członkowskiego CLR.This can be used to provide a name that may not be allowed as a CLR member name. Podczas mapowania do formatu XML przy użyciu DataContractSerializer , ta nazwa jest używana jako nazwa elementu schematu w typie.When mapping to XML using the DataContractSerializer, this name is used as the name of the schema element in a type.

Uwaga

Właściwości, do których DataMemberAttribute zastosowano atrybut, muszą mieć oba get set pola i.Properties to which the DataMemberAttribute attribute has been applied must have both get and set fields. Nie mogą dotyczyć tylko get i set --tylko.They cannot be get-only or set-only. Aby serializować właściwość, która powinna pozostać get tylko przez projekt (na przykład właściwość zwracająca kolekcję), rozważ zastosowanie DataMemberAttribute do pola zapasowego.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.

Aby uzyskać więcej informacji na temat kontraktów danych i członków danych, zobacz Używanie kontraktów danych.For more information about data contracts and data members, see Using Data Contracts. Aby uzyskać więcej informacji o nazwach elementów członkowskich, zobacz domyślne wartości elementów członkowskich danych.For more information about member names, see Data Member Default Values.

Konstruktory

DataMemberAttribute()

Inicjuje nowe wystąpienie klasy DataMemberAttribute.Initializes a new instance of the DataMemberAttribute class.

Właściwości

EmitDefaultValue

Pobiera lub ustawia wartość określającą, czy należy serializować wartości domyślnej dla serializowanego pola lub właściwości.Gets or sets a value that specifies whether to serialize the default value for a field or property being serialized.

IsNameSetExplicitly

Pobiera, czy został Name jawnie ustawiony.Gets whether Name has been explicitly set.

IsRequired

Pobiera lub ustawia wartość, która Instruuje aparat serializacji, że element członkowski musi być obecny podczas odczytywania lub deserializacji.Gets or sets a value that instructs the serialization engine that the member must be present when reading or deserializing.

Name

Pobiera lub ustawia nazwę elementu członkowskiego danych.Gets or sets a data member name.

Order

Pobiera lub ustawia kolejność serializacji i deserializacji elementu członkowskiego.Gets or sets the order of serialization and deserialization of a member.

TypeId

Po zaimplementowaniu w klasie pochodnej pobiera unikatowy identyfikator dla tego elementu Attribute .When implemented in a derived class, gets a unique identifier for this Attribute.

(Odziedziczone po Attribute)

Metody

Equals(Object)

Zwraca wartość wskazującą, czy to wystąpienie jest równe podanemu obiektowi.Returns a value that indicates whether this instance is equal to a specified object.

(Odziedziczone po Attribute)
GetHashCode()

Zwraca wartość skrótu dla tego wystąpienia.Returns the hash code for this instance.

(Odziedziczone po Attribute)
GetType()

Pobiera Type bieżące wystąpienie.Gets the Type of the current instance.

(Odziedziczone po Object)
IsDefaultAttribute()

Gdy jest zastępowany w klasie pochodnej, wskazuje, czy wartość tego wystąpienia jest wartością domyślną klasy pochodnej.When overridden in a derived class, indicates whether the value of this instance is the default value for the derived class.

(Odziedziczone po Attribute)
Match(Object)

Gdy jest zastępowany w klasie pochodnej, zwraca wartość wskazującą, czy to wystąpienie jest zgodne z określonym obiektem.When overridden in a derived class, returns a value that indicates whether this instance equals a specified object.

(Odziedziczone po Attribute)
MemberwiseClone()

Tworzy skróconą kopię bieżącego elementu Object .Creates a shallow copy of the current Object.

(Odziedziczone po Object)
ToString()

Zwraca ciąg reprezentujący bieżący obiekt.Returns a string that represents the current object.

(Odziedziczone po Object)

Jawne implementacje interfejsu

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

Zestaw nazw jest mapowany na odpowiedni zestaw identyfikatorów wysyłania.Maps a set of names to a corresponding set of dispatch identifiers.

(Odziedziczone po Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Pobiera informacje o typie dla obiektu, którego można użyć do uzyskania informacji o typie dla interfejsu.Retrieves the type information for an object, which can be used to get the type information for an interface.

(Odziedziczone po Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Pobiera informację o liczbie typów interfejsów, jakie zawiera obiekt (0 lub 1).Retrieves the number of type information interfaces that an object provides (either 0 or 1).

(Odziedziczone po Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Umożliwia dostęp do właściwości i metod udostępnianych przez obiekt.Provides access to properties and methods exposed by an object.

(Odziedziczone po Attribute)

Dotyczy

Zobacz też