DataMemberAttribute Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Při použití na člena typu určuje, že člen je součástí datového kontraktu a je serializovatelný 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
- Dědičnost
- Atributy
Příklady
Následující příklad ukazuje typ, na který DataContractAttribute byly použity atributy DataMemberAttribute . Vlastnost Name je DataMemberAttribute nastavena na "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
Poznámky
DataMemberAttribute Použijte atribut ve spojení s DataContractAttribute identifikací členů typu, které jsou součástí datového kontraktu. Jedním z serializátorů, které mohou serializovat datové kontrakty je DataContractSerializer.
Model kontraktu dat je model "opt-in". Použití DataMemberAttribute u pole nebo vlastnosti explicitně určuje, že hodnota členu bude serializována. Naproti tomu XmlSerializer serializuje všechna veřejná pole a vlastnosti typu.
Upozornění
Můžete použít DataMemberAttribute privátní pole nebo vlastnosti. Mějte na paměti, že data vrácená členem (i v případě, že jsou soukromá), budou serializována a deserializována, a proto mohou být zobrazena nebo zachycena škodlivým uživatelem nebo procesem.
Ve výchozím nastavení se název člena CLR používá jako název datového členu. Name Nastavením vlastnosti můžete přizpůsobit název datového člena. Dá se použít k zadání názvu, který nemusí být povolený jako název člena CLR. Při mapování na XML pomocí DataContractSerializer, tento název se používá jako název prvku schématu v typu.
Poznámka:
Vlastnosti, na které DataMemberAttribute byl atribut použit, musí mít obě get i set pole. Nemohou být getjen -only nebo set-only. Chcete-li serializovat vlastnost, která by měla zůstat get-only podle návrhu (například vlastnost, která vrací kolekci), zvažte místo toho použití DataMemberAttribute na pomocné pole.
Další informace o kontraktech dat a datových členech najdete v tématu Použití kontraktů dat. Další informace o názvech členů naleznete v tématu Výchozí hodnoty datového členu.
Konstruktory
| Name | Description |
|---|---|
| DataMemberAttribute() |
Inicializuje novou instanci DataMemberAttribute třídy. |
Vlastnosti
| Name | Description |
|---|---|
| EmitDefaultValue |
Získá nebo nastaví hodnotu, která určuje, zda serializovat výchozí hodnotu pole nebo vlastnosti serializace. |
| IsNameSetExplicitly |
Získá, zda Name byl explicitně nastaven. |
| IsRequired |
Získá nebo nastaví hodnotu, která dává modulu serializace pokyn, že člen musí být přítomn při čtení nebo deserializaci. |
| Name |
Získá nebo nastaví název datového členu. |
| Order |
Získá nebo nastaví pořadí serializace a deserializace člena. |
| TypeId |
Při implementaci v odvozené třídě získá jedinečný identifikátor pro tento Attribute. (Zděděno od Attribute) |
Metody
| Name | Description |
|---|---|
| Equals(Object) |
Vrátí hodnotu, která určuje, zda je tato instance rovna zadanému objektu. (Zděděno od Attribute) |
| GetHashCode() |
Vrátí kód hash pro tuto instanci. (Zděděno od Attribute) |
| GetType() |
Získá Type aktuální instance. (Zděděno od Object) |
| IsDefaultAttribute() |
Při přepsání v odvozené třídě určuje, zda hodnota této instance je výchozí hodnotou pro odvozenou třídu. (Zděděno od Attribute) |
| Match(Object) |
Při přepsání v odvozené třídě vrátí hodnotu, která určuje, zda se tato instance rovná zadanému objektu. (Zděděno od Attribute) |
| MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Object. (Zděděno od Object) |
| ToString() |
Vrátí řetězec, který představuje aktuální objekt. (Zděděno od Object) |
Explicitní implementace rozhraní
| Name | Description |
|---|---|
| _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Mapuje sadu názvů na odpovídající sadu identifikátorů pro rozesílání. (Zděděno od Attribute) |
| _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) |
Načte informace o typu objektu, který lze použít k získání informací o typu pro rozhraní. (Zděděno od Attribute) |
| _Attribute.GetTypeInfoCount(UInt32) |
Získá počet rozhraní typu informací, které objekt poskytuje (0 nebo 1). (Zděděno od Attribute) |
| _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Poskytuje přístup k vlastnostem a metodám vystaveným objektem. (Zděděno od Attribute) |