DataContractAttribute Sınıf
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
türünün bir veri sözleşmesini tanımladığını veya uyguladığını ve DataContractSerializergibi bir seri hale getirici tarafından serileştirilebilir olduğunu belirtir. Türlerini serileştirilebilir hale getirmek için, tür yazarlarının türleri için bir veri sözleşmesi tanımlaması gerekir.
public ref class DataContractAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Enum | System.AttributeTargets.Struct, AllowMultiple=false, Inherited=false)]
public sealed class DataContractAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Enum | System.AttributeTargets.Struct, AllowMultiple=false, Inherited=false)>]
type DataContractAttribute = class
inherit Attribute
Public NotInheritable Class DataContractAttribute
Inherits Attribute
- Devralma
- Öznitelikler
Örnekler
Aşağıdaki örnek, uygulanan adlı Person sınıfı serileştirir ve seri durumdan DataContractAttribute çıkartır.
Namespace ve Name özelliklerinin varsayılan ayarları geçersiz kılan değerlere ayarlandığını unutmayın.
namespace DataContractAttributeExample
{
// Set the Name and Namespace properties to new values.
[DataContract(Name = "Customer", Namespace = "http://www.contoso.com")]
class Person : IExtensibleDataObject
{
// To implement the IExtensibleDataObject interface, you must also
// implement the ExtensionData property.
private ExtensionDataObject extensionDataObjectValue;
public ExtensionDataObject ExtensionData
{
get
{
return extensionDataObjectValue;
}
set
{
extensionDataObjectValue = value;
}
}
[DataMember(Name = "CustName")]
internal string Name;
[DataMember(Name = "CustID")]
internal int ID;
public Person(string newName, int newID)
{
Name = newName;
ID = newID;
}
}
class Test
{
public static void Main()
{
try
{
WriteObject("DataContractExample.xml");
ReadObject("DataContractExample.xml");
Console.WriteLine("Press Enter to end");
Console.ReadLine();
}
catch (SerializationException se)
{
Console.WriteLine
("The serialization operation failed. Reason: {0}",
se.Message);
Console.WriteLine(se.Data);
Console.ReadLine();
}
}
public static void WriteObject(string path)
{
// Create a new instance of the Person class and
// serialize it to an XML file.
Person p1 = new Person("Mary", 1);
// Create a new instance of a StreamWriter
// to read and write the data.
FileStream fs = new FileStream(path,
FileMode.Create);
XmlDictionaryWriter writer = XmlDictionaryWriter.CreateTextWriter(fs);
DataContractSerializer ser =
new DataContractSerializer(typeof(Person));
ser.WriteObject(writer, p1);
Console.WriteLine("Finished writing object.");
writer.Close();
fs.Close();
}
public static void ReadObject(string path)
{
// Deserialize an instance of the Person class
// from an XML file. First create an instance of the
// XmlDictionaryReader.
FileStream fs = new FileStream(path, FileMode.OpenOrCreate);
XmlDictionaryReader reader =
XmlDictionaryReader.CreateTextReader(fs, new XmlDictionaryReaderQuotas());
// Create the DataContractSerializer instance.
DataContractSerializer ser =
new DataContractSerializer(typeof(Person));
// Deserialize the data and read it from the instance.
Person newPerson = (Person)ser.ReadObject(reader);
Console.WriteLine("Reading this object:");
Console.WriteLine(String.Format("{0}, ID: {1}",
newPerson.Name, newPerson.ID));
fs.Close();
}
}
}
Namespace DataContractAttributeExample
' Set the Name and Namespace properties to new values.
<DataContract(Name := "Customer", [Namespace] := "http://www.contoso.com")> _
Class Person
Implements IExtensibleDataObject
' To implement the IExtensibleDataObject interface, you must also
' implement the ExtensionData property.
Private extensionDataObjectValue As ExtensionDataObject
Public Property ExtensionData() As ExtensionDataObject _
Implements IExtensibleDataObject.ExtensionData
Get
Return extensionDataObjectValue
End Get
Set
extensionDataObjectValue = value
End Set
End Property
<DataMember(Name := "CustName")> _
Friend Name As String
<DataMember(Name := "CustID")> _
Friend ID As Integer
Public Sub New(ByVal newName As String, ByVal newID As Integer)
Name = newName
ID = newID
End Sub
End Class
Class Test
Public Shared Sub Main()
Try
WriteObject("DataContractExample.xml")
ReadObject("DataContractExample.xml")
Console.WriteLine("Press Enter to end")
Console.ReadLine()
Catch se As SerializationException
Console.WriteLine("The serialization operation failed. Reason: {0}", _
se.Message)
Console.WriteLine(se.Data)
Console.ReadLine()
End Try
End Sub
Public Shared Sub WriteObject(ByVal path As String)
' Create a new instance of the Person class and
' serialize it to an XML file.
Dim p1 As New Person("Mary", 1)
' Create a new instance of a StreamWriter
' to read and write the data.
Dim fs As New FileStream(path, FileMode.Create)
Dim writer As XmlDictionaryWriter = XmlDictionaryWriter.CreateTextWriter(fs)
Dim ser As New DataContractSerializer(GetType(Person))
ser.WriteObject(writer, p1)
Console.WriteLine("Finished writing object.")
writer.Close()
fs.Close()
End Sub
Public Shared Sub ReadObject(ByVal path As String)
' Deserialize an instance of the Person class
' from an XML file. First create an instance of the
' XmlDictionaryReader.
Dim fs As New FileStream(path, FileMode.OpenOrCreate)
Dim reader As XmlDictionaryReader = XmlDictionaryReader. _
CreateTextReader(fs, New XmlDictionaryReaderQuotas())
' Create the DataContractSerializer instance.
Dim ser As New DataContractSerializer(GetType(Person))
' Deserialize the data and read it from the instance.
Dim newPerson As Person = CType(ser.ReadObject(reader), Person)
Console.WriteLine("Reading this object:")
Console.WriteLine(String.Format("{0}, ID: {1}", newPerson.Name, newPerson.ID))
fs.Close()
End Sub
End Class
End Namespace
Açıklamalar
DataContractAttribute özniteliğini, DataContractSerializer tarafından serileştirme ve seri durumdan çıkarma işlemlerinde kullanılan türlere (sınıflar, yapılar veya numaralandırmalar) uygulayın. Windows Communication Foundation (WCF) altyapısını kullanarak ileti gönderiyor veya alıyorsanız, iletilerde gönderilen verileri tutan ve işleyen tüm sınıflara DataContractAttribute'yi de uygulamanız gerekir. Veri sözleşmeleri hakkında daha fazla bilgi için bkz. Veri Sözleşmelerini Kullanma.
ayrıca, serileştirmek istediğiniz değerleri barındıran herhangi bir alana, özelliğe veya olaya da uygulamanız DataMemberAttribute gerekir. DataContractAttribute uygulayarak, verileri seri hale getirmek ve seri durumdan çıkarmak için DataContractSerializer öğesini açıkça etkinleştirirsiniz.
Caution
öğesini özel alanlara uygulayabilirsiniz DataMemberAttribute . Alan tarafından döndürülen verilerin (özel olsa bile) serileştirilip ters serileştirildiğini ve bu nedenle kötü amaçlı bir kullanıcı veya işlem tarafından görüntülenebileceğini veya araya girilebileceğini unutmayın.
Veri sözleşmeleri hakkında daha fazla bilgi için Veri Sözleşmelerini Kullanma başlığı altında listelenen konulara bakın.
Veri sözleşmeleri
Veri sözleşmesi, her alan için bir ad ve veri türüne sahip bir alan kümesinin soyut açıklamasıdır. Veri sözleşmesi, farklı platformlardaki hizmetlerin birlikte çalışabilmesi için tek bir uygulamanın dışında yer alır. Hizmetler arasında geçirilen veriler aynı sözleşmeye uygun olduğu sürece tüm hizmetler verileri işleyebilir. Bu işleme , gevşek bir şekilde bağlanmış bir sistem olarak da bilinir. Veri sözleşmesi, bir uygulama tarafından işlenebilmesi için verilerin nasıl teslim edilmesi gerektiğini belirten bir arabirime de benzer. Örneğin, veri sözleşmesi "Ad" ve "Soyadı" adlı iki metin alanı olan "Kişi" adlı bir veri türünü çağırabilir. Veri sözleşmesi oluşturmak için, `DataContractAttribute`'yı sınıfa ve `DataMemberAttribute`'yi seri hale getirilmesi gereken tüm alanlara veya özelliklere uygulayın. Veriler seri hale getirildiğinde, türe örtük olarak yerleştirilen veri sözleşmesine uygundur.
Note
Veri sözleşmesi, devralma davranışındaki gerçek bir arabirimden önemli ölçüde farklıdır. Arayüzler, türetilmiş türler tarafından devralınır. bir temel sınıfa uyguladığınızda DataContractAttribute , türetilen türler özniteliğini veya davranışını devralmaz. Ancak türetilmiş bir türün veri sözleşmesi varsa, temel sınıfın veri üyeleri seri hale getirilir. Ancak, bunları serileştirilebilir hale getirmek için türetilmiş bir sınıftaki yeni üyelere uygulamanız DataMemberAttribute gerekir.
XML şema belgeleri ve SvcUtil aracı
Diğer hizmetlerle veri alışverişinde bulunuyorsanız, veri sözleşmesini açıklamanız gerekir. geçerli sürümü DataContractSerializeriçin, veri sözleşmelerini tanımlamak için bir XML şeması kullanılabilir. (Diğer meta veri/açıklama biçimleri aynı amaçla kullanılabilir.) Uygulamanızdan XML şeması oluşturmak için ServiceModel Meta Veri Yardımcı Programı Aracı'nı (Svcutil.exe)/dconly komut satırı seçeneğiyle kullanın. Araca giriş bir derleme olduğunda, araç varsayılan olarak bu derlemede bulunan tüm veri sözleşmesi türlerini tanımlayan bir XML şemaları kümesi oluşturur. Buna karşılık, veri sözleşmeleri tarafından ifade edilebilen yapıları kullanan XML şemalarının gereksinimlerine uygun Visual Basic veya C# sınıf tanımları oluşturmak için Svcutil.exe aracını da kullanabilirsiniz. Bu durumda , /dconly komut satırı seçeneği gerekli değildir.
Svcutil.exe aracının girişi bir XML şemasıysa, araç varsayılan olarak bir sınıf kümesi oluşturur. Bu sınıfları incelediğinizde, DataContractAttribute öğesinin uygulandığını fark edersiniz. Bu sınıfları, diğer hizmetlerle alışveriş yapılması gereken verileri işlemek üzere yeni bir uygulama oluşturmak için kullanabilirsiniz.
Windows Communication Foundation (WCF) istemcisi oluşturmak üzere kodu ve yapılandırmayı otomatik olarak oluşturmak için aracı Web Hizmetleri Açıklama Dili (WSDL) belgesi döndüren bir uç noktada da çalıştırabilirsiniz. Oluşturulan kod ile DataContractAttributeişaretlenmiş türleri içerir.
Mevcut türleri yeniden kullanma
Veri sözleşmesinin iki temel gereksinimi vardır: kararlı bir ad ve üye listesi. Sözleşmenin sabit adı, ad alanının tekdüzen kaynak tanımlayıcısı (URI) ve yerel adından oluşur. Varsayılan olarak, bir sınıfa uyguladığınızda DataContractAttribute , yerel ad olarak sınıf adını ve ad alanı URI'si olarak sınıfın ad alanını (ön ekli "http://schemas.datacontract.org/2004/07/") kullanır. ve Name özelliklerini ayarlayarak Namespace varsayılanları geçersiz kılabilirsiniz.
ContractNamespaceAttribute öğesini ad alanına uygulayarak ad alanını da değiştirebilirsiniz. Verileri tam olarak istediğiniz gibi işleyen ancak veri sözleşmesinden farklı bir ad alanı ve sınıf adına sahip olan mevcut bir türünüz varsa bu özelliği kullanın. Varsayılan değerleri geçersiz kılarak mevcut türünüzü yeniden kullanabilir ve serileştirilmiş verilerin veri sözleşmesine uygun olmasını sağlayabilirsiniz.
Note
Herhangi bir kodda, DataContract yerine daha kısa olan DataContractAttribute kelimesini kullanabilirsiniz.
Versioning
Veri sözleşmesi, kendisinin sonraki sürümlerini de barındırabilir. Başka bir ifadeyle, sözleşmenin daha sonraki bir sürümünde ek veriler bulunduğunda bu veriler depolanır ve bir gönderene dokunulmadan döndürülür. Bunu yapmak için arabirimini IExtensibleDataObject uygulayın.
Sürüm oluşturma hakkında daha fazla bilgi için bkz. Veri Sözleşmesi Sürüm Oluşturma.
Oluşturucular
| Name | Description |
|---|---|
| DataContractAttribute() |
DataContractAttribute sınıfının yeni bir örneğini başlatır. |
Özellikler
| Name | Description |
|---|---|
| IsNameSetExplicitly |
Açıkça ayarlanıp ayarlanmadığını Name alır. |
| IsNamespaceSetExplicitly |
Açıkça ayarlanıp ayarlanmadığını Namespace alır. |
| IsReference |
Nesne başvuru verilerinin korunup korunmayacağını belirten bir değer alır veya ayarlar. |
| IsReferenceSetExplicitly |
Açıkça ayarlanıp ayarlanmadığını IsReference alır. |
| Name |
Tür için veri sözleşmesi adını alır veya ayarlar. |
| Namespace |
Türü için veri sözleşmesinin ad alanını alır veya ayarlar. |
| TypeId |
Türetilmiş bir sınıfta uygulandığında, bu Attributeiçin benzersiz bir tanımlayıcı alır. (Devralındığı yer: Attribute) |
Yöntemler
| Name | Description |
|---|---|
| Equals(Object) |
Bu örneğin belirtilen bir nesneye eşit olup olmadığını gösteren bir değer döndürür. (Devralındığı yer: Attribute) |
| GetHashCode() |
Bu örneğin karma kodunu döndürür. (Devralındığı yer: Attribute) |
| GetType() |
Geçerli örneğin Type alır. (Devralındığı yer: Object) |
| IsDefaultAttribute() |
Türetilmiş bir sınıfta geçersiz kılındığında, bu örneğin değerinin türetilmiş sınıf için varsayılan değer olup olmadığını gösterir. (Devralındığı yer: Attribute) |
| Match(Object) |
Türetilmiş bir sınıfta geçersiz kılındığında, bu örneğin belirtilen bir nesneye eşit olup olmadığını gösteren bir değer döndürür. (Devralındığı yer: Attribute) |
| MemberwiseClone() |
Geçerli Objectbasit bir kopyasını oluşturur. (Devralındığı yer: Object) |
| ToString() |
Geçerli nesneyi temsil eden bir dize döndürür. (Devralındığı yer: Object) |
Belirtik Arabirim Kullanımları
| Name | Description |
|---|---|
| _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Bir ad kümesini karşılık gelen bir dağıtma tanımlayıcısı kümesine eşler. (Devralındığı yer: Attribute) |
| _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) |
Bir arabirimin tür bilgilerini almak için kullanılabilecek bir nesnenin tür bilgilerini alır. (Devralındığı yer: Attribute) |
| _Attribute.GetTypeInfoCount(UInt32) |
Bir nesnenin sağladığı tür bilgisi arabirimlerinin sayısını alır (0 ya da 1). (Devralındığı yer: Attribute) |
| _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Bir nesne tarafından kullanıma sunulan özelliklere ve yöntemlere erişim sağlar. (Devralındığı yer: Attribute) |