Auf Englisch lesen

Teilen über


DataMemberAttribute Klasse

Definition

Gibt bei Anwendung auf den Member eines Typs an, dass der Member Teil eines Datenvertrags ist und über den DataContractSerializer serialisierbar ist.

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

Beispiele

Das folgende Beispiel zeigt einen Typ, auf den die DataContractAttribute Attribute und DataMemberAttribute angewendet wurden. Die Name -Eigenschaft für ist DataMemberAttribute auf "ID" festgelegt.

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));
    }
}

Hinweise

Wenden Sie das DataMemberAttribute-Attribut zusammen mit dem DataContractAttribute an, um Member eines Typs zu identifizieren, die Teil eines Datenvertrags sind. Eines der Serialisierungsprogramme, die Datenverträge serialisieren können, ist der DataContractSerializer.

Das Datenvertragsmodell ist ein 'Opt-In'-Modell. Durch Anwendung des DataMemberAttribute auf ein Feld oder eine Eigenschaft wird explizit festgelegt, dass der Memberwert serialisiert werden soll. Im Gegensatz dazu serialisiert der XmlSerializer alle öffentlichen Felder und Eigenschaften eines Typs.

Vorsicht

Sie können den DataMemberAttribute auf private Felder oder Eigenschaften anwenden. Beachten Sie, dass die vom Member zurückgegebenen Daten (auch wenn sie privat sind) serialisiert und deserialisiert werden und somit von einem böswilligen Benutzer oder Prozess angezeigt oder abgefangen werden können.

Standardmäßig wird der CLR-Membername als Name des Datenmembers verwendet. Durch Festlegen der Name-Eigenschaft können Sie den Namen des Datenmembers anpassen. Auf diese Weise kann ein Name angegeben werden, der als CLR-Membername möglicherweise nicht erlaubt ist. Beim Zuordnen zu XML mithilfe des DataContractSerializer wird dieser Name als der Name des Schemaelements in einem Typ verwendet.

Hinweis

Eigenschaften, auf die das DataMemberAttribute Attribut angewendet wurde, müssen über Felder get und set verfügen. Sie können nicht nur oder setnur seinget. Um eine Eigenschaft zu serialisieren, die vom Entwurf her -only bleiben getsoll (z. B. eine Eigenschaft, die eine Auflistung zurückgibt), sollten Sie stattdessen das DataMemberAttribute auf das Sicherungsfeld anwenden.

Weitere Informationen zu Datenverträgen und Datenmembern finden Sie unter Verwenden von Datenverträgen. Weitere Informationen zu Membernamen finden Sie unter Standardwerte für Datenmember.

Konstruktoren

DataMemberAttribute()

Initialisiert eine neue Instanz der DataMemberAttribute-Klasse.

Eigenschaften

EmitDefaultValue

Ruft einen Wert ab, der angibt, ob der Standardwert eines Felds oder einer Eigenschaft serialisiert werden soll, oder legt einen Wert fest.

IsNameSetExplicitly

Ruft ab, ob Name explizit festgelegt wurde.

IsRequired

Ruft einen Wert auf, der die Serialisierungs-Engine anweist, dass der Member beim Lesen oder Deserialisieren vorhanden sein muss, oder legt einen Wert fest.

Name

Ruft einen Datenmembernamen ab oder legt diesen fest.

Order

Ruft die Reihenfolge der Serialisierung und Deserialisierung eines Members ab oder legt diese fest.

TypeId

Ruft bei Implementierung in einer abgeleiteten Klasse einen eindeutigen Bezeichner für dieses Attribute ab.

(Geerbt von Attribute)

Methoden

Equals(Object)

Gibt einen Wert zurück, der angibt, ob diese Instanz gleich einem angegebenen Objekt ist.

(Geerbt von Attribute)
GetHashCode()

Gibt den Hashcode für diese Instanz zurück.

(Geerbt von Attribute)
GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
IsDefaultAttribute()

Gibt beim Überschreiben in einer abgeleiteten Klasse an, ob der Wert der Instanz der Standardwert für die abgeleitete Klasse ist.

(Geerbt von Attribute)
Match(Object)

Beim Überschreiben in einer abgeleiteten Klasse wird ein Wert zurückgegeben, der angibt, ob diese Instanz einem bestimmten Objekt entspricht.

(Geerbt von Attribute)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)

Explizite Schnittstellenimplementierungen

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

Ordnet eine Reihe von Namen einer entsprechenden Reihe von Dispatchbezeichnern zu.

(Geerbt von Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Ruft die Typinformationen für ein Objekt ab, mit deren Hilfe die Typinformationen für eine Schnittstelle abgerufen werden können.

(Geerbt von Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Ruft die Anzahl der Schnittstellen mit Typinformationen ab, die von einem Objekt bereitgestellt werden (0 oder 1).

(Geerbt von Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Stellt den Zugriff auf von einem Objekt verfügbar gemachte Eigenschaften und Methoden bereit.

(Geerbt von Attribute)

Gilt für:

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

Weitere Informationen