DataContractAttribute Sınıf

Tanım

Türün bir veri sözleşmesi tanımlıyor veya uygulayan ve gibi bir serileştirici tarafından seri hale getirilmekte olduğunu belirtir DataContractSerializer .Specifies that the type defines or implements a data contract and is serializable by a serializer, such as the DataContractSerializer. Türlerini seri hale getirilebilir hale getirmek için, tür yazarları türleri için bir veri sözleşmesi tanımlamalıdır.To make their type serializable, type authors must define a data contract for their type.

public ref class DataContractAttribute sealed : Attribute
public sealed class DataContractAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Enum | System.AttributeTargets.Struct, AllowMultiple=false, Inherited=false)]
public sealed class DataContractAttribute : Attribute
type DataContractAttribute = class
    inherit 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, uygulanmış olan adlı bir sınıfı seri hale getirir ve onları yeniden çıkarır Person DataContractAttribute .The following example serializes and deserializes a class named Person to which the DataContractAttribute has been applied. NamespaceVe Name özelliklerinin varsayılan ayarları geçersiz kılan değerler olarak ayarlandığını unutmayın.Note that the Namespace and Name properties have been set to values that override the default settings.

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

Özniteliği, DataContractAttribute serileştirme ve serisini kaldırma işlemlerinde kullanılan türlere (sınıflar, yapılar veya numaralandırmalar) uygulayın DataContractSerializer .Apply the DataContractAttribute attribute to types (classes, structures, or enumerations) that are used in serialization and deserialization operations by the DataContractSerializer. Windows Communication Foundation (WCF) altyapısını kullanarak ileti gönderiyor veya alıyorsanız, ' yi DataContractAttribute iletilerde gönderilen verileri tutan ve işleyen tüm sınıflara de uygulamanız gerekir.If you send or receive messages by using the Windows Communication Foundation (WCF) infrastructure, you should also apply the DataContractAttribute to any classes that hold and manipulate data sent in messages. Veri sözleşmeleri hakkında daha fazla bilgi için bkz. Veri Sözleşmelerini Kullanma.For more information about data contracts, see Using Data Contracts.

Ayrıca, öğesini DataMemberAttribute seri hale getirmek istediğiniz değerleri tutan herhangi bir alan, özellik veya olaya uygulamanız gerekir.You must also apply the DataMemberAttribute to any field, property, or event that holds values you want to serialize. Uygulamasını uygulayarak, DataContractAttribute DataContractSerializer verileri seri hale getirmek ve veri serisini kaldırmak için açıkça etkinleştirmelisiniz.By applying the DataContractAttribute, you explicitly enable the DataContractSerializer to serialize and deserialize the data.

Dikkat

Öğesini DataMemberAttribute özel alanlarına uygulayabilirsiniz.You can apply the DataMemberAttribute to private fields. Alan tarafından döndürülen verilerin (Private olsa bile) serileştirildiğinden ve seri durumdan çıkarıldığından ve bu nedenle kötü amaçlı bir kullanıcı veya işlem tarafından görüntülenebileceğini veya ele alınabildiği farkında olun.Be aware that the data returned by the field (even if it is private) is serialized and deserialized, and thus can be viewed or intercepted by a malicious user or process.

Veri sözleşmeleri hakkında daha fazla bilgi için, veri sözleşmeleri kullanmabölümünde listelenen konulara bakın.For more information about data contracts, see the topics listed in Using Data Contracts.

Veri SözleşmeleriData Contracts

Veri anlaşması , her alan için ad ve veri türüne sahip bir alan kümesinin soyut açıklamasıdır.A data contract is an abstract description of a set of fields with a name and data type for each field. Veri anlaşması, farklı platformlardaki hizmetlerin birlikte çalışabilme için herhangi bir tek uygulamanın dışında bulunur.The data contract exists outside of any single implementation to allow services on different platforms to interoperate. Hizmetler arasında geçirilen veriler aynı sözleşmeye uygun olduğu sürece, tüm hizmetler verileri işleyebilir.As long as the data passed between the services conforms to the same contract, all the services can process the data. Bu işleme gevşek olarak bağlanmış bir sistemolarak da bilinir.This processing is also known as a loosely coupled system. Veri anlaşması Ayrıca, sözleşmenin bir uygulama tarafından işlenebilmesi için verilerin nasıl teslim edilmesi gerektiğini belirten bir arabirime benzer.A data contract is also similar to an interface in that the contract specifies how data must be delivered so that it can be processed by an application. Örneğin, veri anlaşması "FirstName" ve "LastName" adlı iki metin alanına sahip "Person" adlı bir veri türünü çağırabilir.For example, the data contract may call for a data type named "Person" that has two text fields, named "FirstName" and "LastName". Bir veri anlaşması oluşturmak için, öğesini DataContractAttribute sınıfına uygulayın ve ' ı, DataMemberAttribute serileştirilmesi gereken tüm alanlara veya özelliklere uygulayın.To create a data contract, apply the DataContractAttribute to the class and apply the DataMemberAttribute to any fields or properties that must be serialized. Serileştirilmiş olduğunda, veriler, türü içinde örtülü olarak yerleşik olarak bulunan veri sözleşmesine uyar.When serialized, the data conforms to the data contract that is implicitly built into the type.

Not

Veri anlaşması, devralma davranışında gerçek bir arabirimden önemli ölçüde farklılık gösterir.A data contract differs significantly from an actual interface in its inheritance behavior. Arabirimler türetilmiş türler tarafından devralınır.Interfaces are inherited by any derived types. DataContractAttribute' I bir temel sınıfa uyguladığınızda, türetilmiş türler özniteliği veya davranışı aktarılmaz.When you apply the DataContractAttribute to a base class, the derived types do not inherit the attribute or the behavior. Ancak, türetilmiş bir türün bir veri anlaşması varsa, taban sınıfının veri üyeleri serileştirilir.However, if a derived type has a data contract, the data members of the base class are serialized. Ancak, DataMemberAttribute bunları seri hale getirilebilir hale getirmek için türetilmiş bir sınıftaki yeni üyelere uygulamanız gerekir.However, you must apply the DataMemberAttribute to new members in a derived class to make them serializable.

XML şeması belgeleri ve SvcUtil aracıXML Schema Documents and the SvcUtil Tool

Diğer hizmetlerle veri alışverişi yapıyorsanız, veri sözleşmesini açıklamanız gerekir.If you are exchanging data with other services, you must describe the data contract. Öğesinin geçerli sürümü için DataContractSerializer , veri sözleşmelerini tanımlamak üzere BIR XML şeması kullanılabilir.For the current version of the DataContractSerializer, an XML schema can be used to define data contracts. (Diğer meta veri/açıklama biçimleri aynı amaçla kullanılabilir.) Uygulamanızdan bir XML şeması oluşturmak için, /dconly komut satırı seçeneğiyle ServiceModel meta veri yardımcı programı aracını (Svcutil.exe) kullanın.(Other forms of metadata/description could be used for the same purpose.) To create an XML schema from your application, use the ServiceModel Metadata Utility Tool (Svcutil.exe) with the /dconly command line option. Araç girişi bir derlemedir, varsayılan olarak araç, bu derlemede bulunan tüm veri anlaşması türlerini tanımlayan bir XML şemaları kümesi oluşturur.When the input to the tool is an assembly, by default, the tool generates a set of XML schemas that define all the data contract types found in that assembly. Buna karşılık, veri sözleşmeleri tarafından ifade edilebilir yapılar kullanan XML şemaları gereksinimlerine uygun Visual Basic veya C# sınıf tanımları oluşturmak için Svcutil.exe aracını da kullanabilirsiniz.Conversely, you can also use the Svcutil.exe tool to create Visual Basic or C# class definitions that conform to the requirements of XML schemas that use constructs that can be expressed by data contracts. Bu durumda, /dconly komut satırı seçeneği gerekli değildir.In this case, the /dconly command line option is not required.

Svcutil.exe aracı girişi bir XML şeması ise, varsayılan olarak araç bir sınıf kümesi oluşturur.If the input to the Svcutil.exe tool is an XML schema, by default, the tool creates a set of classes. Bu sınıfları incelerseniz, DataContractAttribute uygulandığını görürsünüz.If you examine those classes, you find that the DataContractAttribute has been applied. Diğer hizmetlerle birlikte alışverişi gereken verileri işlemek için yeni bir uygulama oluşturmak üzere bu sınıfları kullanabilirsiniz.You can use those classes to create a new application to process data that must be exchanged with other services.

Ayrıca, bir Web Hizmetleri Açıklama Dili (WSDL) belgesi döndüren bir uç noktaya karşı aracı çalıştırarak, bir Windows Communication Foundation (WCF) istemcisi oluşturmak üzere kodu ve yapılandırmayı otomatik olarak oluşturabilirsiniz.You can also run the tool against an endpoint that returns a Web Services Description Language (WSDL) document to automatically generate the code and configuration to create an Windows Communication Foundation (WCF) client. Oluşturulan kod, ile işaretlenmiş türleri içerir DataContractAttribute .The generated code includes types that are marked with the DataContractAttribute.

Mevcut türler yeniden kullanılıyorReusing Existing Types

Bir veri sözleşmesinin iki temel gereksinimi vardır: kararlı bir ad ve üyelerin listesi.A data contract has two basic requirements: a stable name and a list of members. Kararlı ad, ad alanı Tekdüzen Kaynak tanımlayıcısı (URI) ve sözleşmenin yerel adından oluşur.The stable name consists of the namespace uniform resource identifier (URI) and the local name of the contract. Varsayılan olarak, ' DataContractAttribute a bir sınıfa uyguladığınızda, "http://schemas.datacontract.org/2004/07/" ad alanı URI 'si olarak sınıf adı ' nı yerel ad ve sınıfın ad alanı (önekli) olarak kullanır.By default, when you apply the DataContractAttribute to a class, it uses the class name as the local name and the class's namespace (prefixed with "http://schemas.datacontract.org/2004/07/") as the namespace URI. Ve özelliklerini ayarlayarak Varsayılanları geçersiz kılabilirsiniz Name Namespace .You can override the defaults by setting the Name and Namespace properties. Ad alanını ad alanına uygulayarak da değiştirebilirsiniz ContractNamespaceAttribute .You can also change the namespace by applying the ContractNamespaceAttribute to the namespace. Bu özelliği, verileri tam olarak ihtiyaç duyduğunuz şekilde işleyen, ancak veri sözleşmesinden farklı bir ad alanına ve sınıf adına sahip olan mevcut bir türde olduğunda kullanın.Use this capability when you have an existing type that processes data exactly as you require but has a different namespace and class name from the data contract. Varsayılan değerleri geçersiz kılarak, var olan türü yeniden kullanabilir ve serileştirilmiş verilerin veri sözleşmesine uymasını sağlayabilirsiniz.By overriding the default values, you can reuse your existing type and have the serialized data conform to the data contract.

Not

Herhangi bir kodda, DataContract daha uzun yerine sözcüğünü kullanabilirsiniz DataContractAttribute .In any code, you can use the word DataContract instead of the longer DataContractAttribute.

Sürüm OluşturmaVersioning

Bir veri anlaşması Ayrıca kendi sonraki sürümlerine de uyum sağlayabilir.A data contract can also accommodate later versions of itself. Diğer bir deyişle, sözleşmenin sonraki bir sürümü ek veri içerdiğinde, bu veriler depolanır ve bir gönderene dokunulmadan döndürülür.That is, when a later version of the contract includes extra data, that data is stored and returned to a sender untouched. Bunu yapmak için IExtensibleDataObject arabirimini uygulayın.To do this, implement the IExtensibleDataObject interface.

Sürüm oluşturma hakkında daha fazla bilgi için bkz. veri sözleşmesi sürümü oluşturma.For more information about versioning, see Data Contract Versioning.

Oluşturucular

DataContractAttribute()

DataContractAttribute sınıfının yeni bir örneğini başlatır.Initializes a new instance of the DataContractAttribute class.

Özellikler

IsNameSetExplicitly

Açıkça ayarlanmış olup olmadığını alır Name .Gets whether Name has been explicitly set.

IsNamespaceSetExplicitly

Açıkça ayarlanmış olup olmadığını alır Namespace .Gets whether Namespace has been explicitly set.

IsReference

Nesne başvuru verilerinin korunup korunmayacağını gösteren bir değer alır veya ayarlar.Gets or sets a value that indicates whether to preserve object reference data.

IsReferenceSetExplicitly

Açıkça ayarlanmış olup olmadığını alır IsReference .Gets whether IsReference has been explicitly set.

Name

Tür için veri sözleşmesinin adını alır veya ayarlar.Gets or sets the name of the data contract for the type.

Namespace

Tür için veri sözleşmesinin ad alanını alır veya ayarlar.Gets or sets the namespace for the data contract for the type.

TypeId

Türetilmiş bir sınıfta uygulandığında, bunun için benzersiz bir tanımlayıcı alır Attribute .When implemented in a derived class, gets a unique identifier for this Attribute.

(Devralındığı yer: Attribute)

Yöntemler

Equals(Object)

Bu örneğin belirtilen bir nesneye eşit olup olmadığını gösteren bir değeri döndürür.Returns a value that indicates whether this instance is equal to a specified object.

(Devralındığı yer: Attribute)
GetHashCode()

Bu örneğe ilişkin karma kodu döndürür.Returns the hash code for this instance.

(Devralındığı yer: Attribute)
GetType()

TypeGeçerli örneği alır.Gets the Type of the current instance.

(Devralındığı yer: Object)
IsDefaultAttribute()

Türetilmiş bir sınıfta geçersiz kılınırsa, bu örneğin değerinin türetilmiş sınıf için varsayılan değer olup olmadığını gösterir.When overridden in a derived class, indicates whether the value of this instance is the default value for the derived class.

(Devralındığı yer: Attribute)
Match(Object)

Türetilmiş bir sınıfta geçersiz kılınırsa, bu örneğin belirtilen bir nesneye eşit olup olmadığını gösteren bir değer döndürür.When overridden in a derived class, returns a value that indicates whether this instance equals a specified object.

(Devralındığı yer: Attribute)
MemberwiseClone()

Geçerli bir basit kopyasını oluşturur Object .Creates a shallow copy of the current Object.

(Devralındığı yer: Object)
ToString()

Geçerli nesneyi temsil eden dizeyi döndürür.Returns a string that represents the current object.

(Devralındığı yer: Object)

Belirtik Arabirim Kullanımları

_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.Maps a set of names to a corresponding set of dispatch identifiers.

(Devralındığı yer: Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Bir arabirimin tür bilgilerini almak için kullanılabilen bir nesnenin tür bilgilerini alır.Retrieves the type information for an object, which can be used to get the type information for an interface.

(Devralındığı yer: Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Bir nesnenin sağladığı tür bilgisi arabirimlerinin sayısını alır (0 ya da 1).Retrieves the number of type information interfaces that an object provides (either 0 or 1).

(Devralındığı yer: Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Bir nesne tarafından sunulan özelliklere ve yöntemlere erişim sağlar.Provides access to properties and methods exposed by an object.

(Devralındığı yer: Attribute)

Şunlara uygulanır

Ayrıca bkz.