DataMemberAttribute Klasa

Definicja

W przypadku zastosowania do elementu członkowskiego typu określa, że element członkowski jest częścią kontraktu danych i jest serializowalny przez DataContractSerializerelement .

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

Przykłady

W poniższym przykładzie pokazano typ, do którego DataContractAttribute zastosowano atrybuty i DataMemberAttribute . Właściwość na obiekcie DataMemberAttribute jest ustawiona Name na wartość "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));
    }
}

Uwagi

DataMemberAttribute Zastosuj atrybut w połączeniu z elementem DataContractAttribute , aby zidentyfikować elementy członkowskie typu, które są częścią kontraktu danych. Jednym z serializatorów, które mogą serializować kontrakty danych, jest DataContractSerializer.

Model kontraktu danych jest modelem "opt-in". DataMemberAttribute Zastosowanie elementu do pola lub właściwości jawnie określa, że wartość składowa zostanie serializowana. XmlSerializer Natomiast serializuje wszystkie pola publiczne i właściwości typu.

Przestroga

Możesz zastosować element DataMemberAttribute do pól prywatnych lub właściwości. Należy pamiętać, że dane zwrócone przez członka (nawet jeśli są prywatne) będą serializowane i deserializowane, a tym samym mogą być wyświetlane lub przechwytywane przez złośliwego użytkownika lub procesu.

Domyślnie nazwa elementu członkowskiego CLR jest używana jako nazwa elementu członkowskiego danych. Ustawiając Name właściwość, można dostosować nazwę elementu członkowskiego danych. Może to służyć do podania nazwy, która może nie być dozwolona jako nazwa elementu członkowskiego CLR. Podczas mapowania na kod XML przy użyciu DataContractSerializermetody ta nazwa jest używana jako nazwa elementu schematu w typie.

Uwaga

Właściwości, do których DataMemberAttribute zastosowano atrybut, muszą mieć zarówno pola, jak get i set . Nie mogą być gettylko -ani set-only. Aby serializować właściwość, która powinna pozostać get- tylko według projektu (na przykład właściwość zwracająca kolekcję), rozważ zastosowanie DataMemberAttribute wartości do pola tworzenia kopii zapasowej.

Aby uzyskać więcej informacji na temat kontraktów danych i członków danych, zobacz Using Data Contracts (Używanie kontraktów danych). Aby uzyskać więcej informacji na temat nazw członków, zobacz Wartości domyślne elementu członkowskiego danych.

Konstruktory

DataMemberAttribute()

Inicjuje nowe wystąpienie klasy DataMemberAttribute.

Właściwości

EmitDefaultValue

Pobiera lub ustawia wartość określającą, czy serializować wartość domyślną pola lub właściwości, która jest serializowana.

IsNameSetExplicitly

Pobiera, czy Name został jawnie ustawiony.

IsRequired

Pobiera lub ustawia wartość, która instruuje aparat serializacji, który musi być obecny podczas odczytywania lub deserializacji.

Name

Pobiera lub ustawia nazwę elementu członkowskiego danych.

Order

Pobiera lub ustawia kolejność serializacji i deserializacji elementu członkowskiego.

TypeId

Po zaimplementowaniu w klasie pochodnej pobiera unikatowy identyfikator dla tego elementu Attribute.

(Odziedziczone po Attribute)

Metody

Equals(Object)

Zwraca wartość wskazującą, czy to wystąpienie jest równe podanemu obiektowi.

(Odziedziczone po Attribute)
GetHashCode()

Zwraca wartość skrótu dla tego wystąpienia.

(Odziedziczone po Attribute)
GetType()

Type Pobiera bieżące wystąpienie.

(Odziedziczone po Object)
IsDefaultAttribute()

W przypadku zastąpienia w klasie pochodnej wskazuje, czy wartość tego wystąpienia jest wartością domyślną klasy pochodnej.

(Odziedziczone po Attribute)
Match(Object)

W przypadku zastąpienia w klasie pochodnej zwraca wartość wskazującą, czy to wystąpienie jest równe określonemu obiektowi.

(Odziedziczone po Attribute)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)

Jawne implementacje interfejsu

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

Zestaw nazw jest mapowany na odpowiedni zestaw identyfikatorów wysyłania.

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

Pobiera informacje o typie obiektu, którego można użyć do pobrania informacji o typie interfejsu.

(Odziedziczone po Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Pobiera informację o liczbie typów interfejsów, jakie zawiera obiekt (0 lub 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.

(Odziedziczone po Attribute)

Dotyczy

Produkt Wersje
.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

Zobacz też