Il presente articolo è stato tradotto automaticamente. Passare il puntatore sulle frasi nell'articolo per visualizzare il testo originale. Ulteriori informazioni.
Traduzione
Originale
Questo argomento non è stato ancora valutato - Valuta questo argomento

Classe DataContractAttribute

Specifica che il tipo definisce o implementa un contratto dati ed è serializzabile da un serializzatore, ad esempio DataContractSerializer. Per rendere il tipo serializzabile, gli autori dei tipi devono definire un contratto dati in base al tipo.

System.Object
  System.Attribute
    System.Runtime.Serialization.DataContractAttribute

Spazio dei nomi:  System.Runtime.Serialization
Assembly:  System.Runtime.Serialization (in System.Runtime.Serialization.dll)
[AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Struct|AttributeTargets.Enum, Inherited = false, 
	AllowMultiple = false)]
public sealed class DataContractAttribute : Attribute

Il tipo DataContractAttribute espone i seguenti membri.

  NomeDescrizione
Metodo pubblicoSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreDataContractAttributeInizializza una nuova istanza di DataContractAttribute classe.
In alto
  NomeDescrizione
Proprietà pubblicaSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreIsReferenceOttiene o imposta un valore che indica se mantenere i dati di riferimento a un oggetto.
Proprietà pubblicaSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreNameOttiene o imposta il nome di contratto dati per il tipo.
Proprietà pubblicaSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreNamespaceOttiene o imposta lo spazio dei nomi per il contratto dati per il tipo.
Proprietà pubblicaTypeId Quando implementato in una classe derivata, ottiene un identificatore univoco per questo Attribute. (Ereditato da Attribute)
In alto
  NomeDescrizione
Metodo pubblicoSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreEqualsInfrastruttura. Restituisce un valore che indica se l'istanza è uguale ad un oggetto specificato. (Ereditato da Attribute)
Metodo pubblicoSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreGetHashCode Restituisce il codice hash per l'istanza corrente. (Ereditato da Attribute)
Metodo pubblicoSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreGetTypeOttiene l'oggetto Type dell'istanza corrente. (Ereditato da Object)
Metodo pubblicoIsDefaultAttribute Quando viene eseguito l'override in una classe derivata, indica se il valore di questa istanza è il valore predefinito per la classe derivata. (Ereditato da Attribute)
Metodo pubblicoMatch Quando viene eseguito l'override in una classe derivata, restituisce un valore che indica se questa istanza equivale a un oggetto specificato. (Ereditato da Attribute)
Metodo pubblicoSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreToString Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object)
In alto
  NomeDescrizione
Implementazione esplicita dell'interfacciaMetodo privato_Attribute.GetIDsOfNames Esegue il mapping di un set di nomi a un corrispondente set di identificatori di dispatch. (Ereditato da Attribute)
Implementazione esplicita dell'interfacciaMetodo privato_Attribute.GetTypeInfoRecupera le informazioni sui tipi per un oggetto, che può essere utilizzato per ottenere informazioni sul tipo per un'interfaccia. (Ereditato da Attribute)
Implementazione esplicita dell'interfacciaMetodo privato_Attribute.GetTypeInfoCount Recupera il numero di interfacce di informazioni sui tipi che un oggetto fornisce (0 o 1). (Ereditato da Attribute)
Implementazione esplicita dell'interfacciaMetodo privato_Attribute.Invoke Fornisce l'accesso alle proprietà ed ai metodi esposti da un oggetto. (Ereditato da Attribute)
In alto

applicare DataContractAttribute attributo ai tipi (classi, strutture, enumerazioni che vengono utilizzate nelle operazioni di serializzazione e deserializzazione di serializzazione da DataContractSerializer. Se si inviano o si ricevono i messaggi tramite Windows Communication Foundation (WCF) l'infrastruttura, è inoltre necessario applicare DataContractAttribute alle classi che utilizzano e modificare i dati inviati messaggi. Per ulteriori informazioni su i contratti dati, vedere Utilizzo dei contratti dati.

È inoltre necessario applicare DataMemberAttribute a qualsiasi campo, una proprietà, un evento o che utilizza i valori si desidera serializzare. Applicando DataContractAttribute, in modo esplicito abilitate DataContractSerializer per serializzare e deserializzare i dati.

Nota di avvisoAttenzione

È possibile applicare DataMemberAttribute ai campi privati. Tenere presente che i dati restituiti dal campo (anche se sono privati) vengono serializzati e deserializzati e può essere visualizzato o intercettata così da un utente malintenzionato o un processo.

Per ulteriori informazioni su i contratti dati, vedere gli argomenti elencati in Utilizzo dei contratti dati.

contratti dati

In contratto dati è una descrizione astratta di un set di campi con un nome e un tipo di dati per ogni campo. Il contratto dati esiste all'esterno di qualsiasi singola implementazione per consentire ai servizi su piattaforme diverse interagiscano. Fintantoché i dati passati tra i servizi siano conformi allo stesso contratto, tutti i servizi possono elaborare i dati. L'elaborazione è anche nota come sistema a regime di controllo libero (" loosely-coupled "). Un contratto dati è simile a un'interfaccia in quanto il contratto specifica il modo in cui i dati devono essere resi affinché possa essere elaborato da un'applicazione. Ad esempio, il contratto dati può richiedere un tipo di dati denominato “persona„ con due campi di testo, denominato “FirstName„ e “LastName„. per creare un contratto dati, applicare DataContractAttribute alla classe e applicare DataMemberAttribute ai campi o le proprietà che devono essere serializzati. Una volta serializzati, i dati sono conformi al contratto dati creato in modo implicito viene compilato nel tipo.

NotaNota

Un contratto dati differisce notevolmente da una vera e propria interfaccia nel comportamento di ereditarietà. Le interfacce ereditate dai tipi derivati. Quando si applica DataContractAttribute in una classe base, i tipi derivati non ereditano l'attributo o il comportamento. Tuttavia, se un tipo derivato dispone di un contratto dati, i membri dati della classe base sono serializzati. Tuttavia, è necessario applicare DataMemberAttribute ai nuovi membri in una classe derivata per renderle serializzabili.

Documenti XML schema e lo strumento di SvcUtil

Se si esegue lo scambio di dati con altri servizi, è necessario descrivere il contratto dati. Per la versione corrente di DataContractSerializer, uno Schema XML può essere utilizzato per definire i contratti dati. (Altri form dei metadati/descrizione possono essere utilizzati per la stessa funzione.) Per creare uno Schema XML dall'applicazione, utilizzare Strumento servicemodel di metadati del modello di servizi (Svcutil.exe) con /dconly opzione della riga di comando. Se l'input allo strumento è un assembly, per impostazione predefinita, lo strumento generato un set di Schemi XML che definiscono tutti i tipi di contratto dati presenti in tale assembly. Per contro, è anche possibile utilizzare lo strumento Svcutil.exe per creare le definizioni della classe c# o Visual Basic che soddisfano i requisiti degli Schemi XML che utilizzano i costrutti che possono essere espressi dai contratti dati. in questo caso, /dconly l'opzione della riga di comando non è obbligatoria.

Se l'input allo strumento Svcutil.exe è uno Schema XML, per impostazione predefinita, lo strumento crea un set di classi. Se si esaminano le classi, si ritiene che DataContractAttribute è stato applicato. È possibile utilizzare queste classi per creare una nuova applicazione elaborare i dati che è possibile scambiare con altri servizi.

È possibile eseguire lo strumento con un endpoint che restituisce un documento (WSDL) di Web Services Description Language) per generare automaticamente codice e la configurazione per creare Windows Communication Foundation (WCF) client. Il codice generato include i tipi contrassegnati con DataContractAttribute.

Riutilizzo dei tipi esistenti

Un contratto dati ha due necessità: un nome stabile e un elenco di membri. Il nome stabile formato URI (URI) dello spazio dei nomi e il nome locale del contratto. Per impostazione predefinita, quando si applica DataContractAttribute a una classe, viene utilizzato il nome della classe come nome locale e lo spazio dei nomi delle classi (con prefisso “http://schemas.datacontract.org/2004/07/ ") come l'URI dello spazio dei nomi. È possibile eseguire l'override delle impostazioni predefinite impostando Name e Namespace proprietà. È inoltre possibile modificare lo spazio dei nomi applicando ContractNamespaceAttribute lo spazio dei nomi. Utilizzare questa funzionalità quando è presente un tipo esistente che elabora dati esattamente come si richiede ma uno spazio dei nomi e un nome di classe differenti dal contratto dati. Eseguendo l'override dei valori predefiniti, è possibile riutilizzare il tipo esistente e fare rispettare i dati serializzati al contratto dati.

NotaNota

Nel codice, è possibile utilizzare la parola DataContract anziché più lungo DataContractAttribute.

controllare la versione

Un contratto dati può anche includere le versioni successive se stesso. Ad esempio quando una versione successiva del contratto include dati aggiuntivi, tali dati sono archiviati e restituiti a un mittente non gestito. A tale scopo, distribuire IExtensibleDataObject interfaccia.

Per ulteriori informazioni su controllare la versione, vedere Controllo della versione del contratto dati.

Nell'esempio seguente viene serializzato e deserializza una classe denominata Person a cui DataContractAttribute è stato applicato. si noti che Namespace e Name le proprietà sono state impostate sui valori che eseguono l'override delle impostazioni predefinite.


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();
        }

    }
}


.NET Framework

Supportato in: 4.5, 4, 3.5, 3.0

.NET Framework Client Profile

Supportato in: 4, 3.5 SP1

Libreria di classi portabile

Supportato in: Libreria di classi portabile

.NET per applicazioni Windows Store

Supportato in: Windows 8

Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (ruoli di base del server non supportati), Windows Server 2008 R2 (ruoli di base del server supportati con SP1 o versione successiva, Itanium non supportato)

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.
Qualsiasi membro static (Shared in Visual Basic) pubblico di questo tipo è thread-safe. I membri di istanza non sono garantiti come thread-safe.
Il documento è risultato utile?
(1500 caratteri rimanenti)

Aggiunte alla community

AGGIUNGI
© 2013 Microsoft. Tutti i diritti riservati.