DataContractAttribute Sınıf

Tanım

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
DataContractAttribute
Ö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)

Şunlara uygulanır

Ayrıca bkz.