DataMemberAttribute Klass
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
När den tillämpas på medlemmen av en typ anger att medlemmen är en del av ett datakontrakt och är serialiserbar av 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
- Arv
- Attribut
Exempel
I följande exempel visas en typ som attributen DataContractAttribute och DataMemberAttribute har tillämpats på. Egenskapen Name på DataMemberAttribute är inställd på "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
Kommentarer
DataMemberAttribute Använd attributet tillsammans med DataContractAttribute för att identifiera medlemmar av en typ som ingår i ett datakontrakt. En av serialiserarna som kan serialisera datakontrakt är DataContractSerializer.
Datakontraktsmodellen är en "opt-in"-modell. Om du tillämpar på DataMemberAttribute ett fält eller en egenskap anges uttryckligen att medlemsvärdet ska serialiseras. Däremot XmlSerializer serialiserar serialiseras alla offentliga fält och egenskaper av en typ.
Caution
Du kan använda för DataMemberAttribute privata fält eller egenskaper. Tänk på att de data som returneras av medlemmen (även om de är privata) kommer att serialiseras och deserialiseras och kan därför visas eller fångas upp av en obehörig användare eller process.
Som standard används CLR-medlemsnamnet som namnet på datamedlemmen. Genom att Name ange egenskapen kan du anpassa namnet på datamedlemmen. Detta kan användas för att ange ett namn som kanske inte tillåts som ett CLR-medlemsnamn. När du mappar till XML med hjälp DataContractSerializerav används det här namnet som namnet på schemaelementet i en typ.
Note
Egenskaper som DataMemberAttribute attributet har tillämpats på måste ha både get fält och set . De kan inte vara get- endast eller set- bara. Om du vill serialisera en egenskap som endast ska finnas kvar getefter design (till exempel en egenskap som returnerar en samling) bör du överväga att tillämpa på DataMemberAttribute bakgrundsfältet i stället.
Mer information om datakontrakt och datamedlemmar finns i Använda datakontrakt. Mer information om medlemsnamn finns i Standardvärden för datamedlem.
Konstruktorer
| Name | Description |
|---|---|
| DataMemberAttribute() |
Initierar en ny instans av DataMemberAttribute klassen. |
Egenskaper
| Name | Description |
|---|---|
| EmitDefaultValue |
Hämtar eller anger ett värde som anger om standardvärdet för ett fält eller en egenskap ska serialiseras. |
| IsNameSetExplicitly |
Hämtar om Name har angetts uttryckligen. |
| IsRequired |
Hämtar eller anger ett värde som instruerar serialiseringsmotorn att medlemmen måste finnas vid läsning eller deserialisering. |
| Name |
Hämtar eller anger ett datamedlemsnamn. |
| Order |
Hämtar eller anger ordningen för serialisering och deserialisering av en medlem. |
| TypeId |
När den implementeras i en härledd klass hämtar du en unik identifierare för den här Attribute. (Ärvd från Attribute) |
Metoder
| Name | Description |
|---|---|
| Equals(Object) |
Returnerar ett värde som anger om den här instansen är lika med ett angivet objekt. (Ärvd från Attribute) |
| GetHashCode() |
Returnerar hash-koden för den här instansen. (Ärvd från Attribute) |
| GetType() |
Hämtar den aktuella instansen Type . (Ärvd från Object) |
| IsDefaultAttribute() |
När den åsidosättas i en härledd klass anger du om värdet för den här instansen är standardvärdet för den härledda klassen. (Ärvd från Attribute) |
| Match(Object) |
När den åsidosätts i en härledd klass returneras ett värde som anger om den här instansen är lika med ett angivet objekt. (Ärvd från Attribute) |
| MemberwiseClone() |
Skapar en ytlig kopia av den aktuella Object. (Ärvd från Object) |
| ToString() |
Returnerar en sträng som representerar det aktuella objektet. (Ärvd från Object) |
Explicita gränssnittsimplementeringar
| Name | Description |
|---|---|
| _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Mappar en uppsättning namn till en motsvarande uppsättning av sändningsidentifierare. (Ärvd från Attribute) |
| _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) |
Hämtar typinformationen för ett objekt, som kan användas för att hämta typinformationen för ett gränssnitt. (Ärvd från Attribute) |
| _Attribute.GetTypeInfoCount(UInt32) |
Hämtar antalet typinformationsgränssnitt som ett objekt tillhandahåller (antingen 0 eller 1). (Ärvd från Attribute) |
| _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Ger åtkomst till egenskaper och metoder som exponeras av ett objekt. (Ärvd från Attribute) |