Classe DataContractSerializer (System.Runtime.Serialization)

Cambia visualizzazione:
ScriptFree
Riferimento a .NET Framework
Classe DataContractSerializer
Il presente articolo è stato tradotto manualmente. Per visualizzare questa pagina e contemporaneamente visualizzarne il contenuto in lingua inglese, passare alla visualizzazione semplificata.

Serializza e deserializza un'istanza di un tipo in un flusso o documento XML utilizzando un contratto dati fornito.Questa classe non può essere ereditata.

Gerarchia di ereditarietà

System.Object
  System.Runtime.Serialization.XmlObjectSerializer
    System.Runtime.Serialization.DataContractSerializer

Spazio dei nomi:  System.Runtime.Serialization
Assembly:  System.Runtime.Serialization (in System.Runtime.Serialization.dll)
Sintassi

Visual Basic
Public NotInheritable Class DataContractSerializer _
	Inherits XmlObjectSerializer
C#
public sealed class DataContractSerializer : XmlObjectSerializer
Visual C++
public ref class DataContractSerializer sealed : public XmlObjectSerializer
F#
[<Sealed>]
type DataContractSerializer =  
    class
        inherit XmlObjectSerializer
    end

Il tipo DataContractSerializer espone i seguenti membri.

Costruttori

  Nome Descrizione
Metodo pubblico ms405768.PortableClassLibrary(it-it,VS.100).gif DataContractSerializer(Type) Inizializza una nuova istanza della classe DataContractSerializer per serializzare o deserializzare un oggetto del tipo specificato.
Metodo pubblico ms405768.PortableClassLibrary(it-it,VS.100).gif DataContractSerializer(Type, IEnumerable<Type>) Inizializza una nuova istanza della classe DataContractSerializer per serializzare o deserializzare un oggetto del tipo specificato e una raccolta di tipi conosciuti che possono essere presenti nell'oggetto grafico.
Metodo pubblico ms405768.PortableClassLibrary(it-it,VS.100).gif DataContractSerializer(Type, String, String) Inizializza una nuova istanza della classe DataContractSerializer per serializzare o deserializzare un oggetto del tipo specificato utilizzando l'elemento radice e lo spazio dei nomi XML forniti.
Metodo pubblico ms405768.PortableClassLibrary(it-it,VS.100).gif DataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString) Inizializza una nuova istanza della classe DataContractSerializer per serializzare o deserializzare un oggetto del tipo specificato utilizzando l'elemento radice e lo spazio dei nomi XML specificati dai parametri di tipo XmlDictionaryString.
Metodo pubblico ms405768.PortableClassLibrary(it-it,VS.100).gif DataContractSerializer(Type, String, String, IEnumerable<Type>) Inizializza una nuova istanza della classe DataContractSerializer per serializzare o deserializzare un oggetto del tipo specificato. Questo metodo specifica inoltre l'elemento XML radice e lo spazio dei nomi in due parametri di stringa nonché un elenco di tipi conosciuti che possono essere presenti nell'oggetto grafico.
Metodo pubblico ms405768.PortableClassLibrary(it-it,VS.100).gif DataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>) Inizializza una nuova istanza della classe DataContractSerializer per serializzare o deserializzare un oggetto del tipo specificato. Questo metodo specifica inoltre l'elemento XML radice e lo spazio dei nomi in due parametri XmlDictionaryString nonché un elenco di tipi conosciuti che possono essere presenti nell'oggetto grafico.
Metodo pubblico DataContractSerializer(Type, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate) Inizializza una nuova istanza della classe DataContractSerializer per serializzare o deserializzare un oggetto del tipo specificato. Questo metodo specifica inoltre un elenco di tipi conosciuti che possono essere presenti nell'oggetto grafico, il numero massimo di elementi dell'oggetto grafico da serializzare, parametri per ignorare i dati imprevisti, se utilizzare costrutti XML non standard per conservare i dati del riferimento all'oggetto nell'oggetto grafico e un surrogato per la serializzazione personalizzata.
Metodo pubblico DataContractSerializer(Type, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver) Inizializza una nuova istanza della classe DataContractSerializer per serializzare o deserializzare un oggetto del tipo specificato. Questo metodo specifica inoltre un elenco di tipi conosciuti che possono essere presenti nell'oggetto grafico, il numero massimo di elementi dell'oggetto grafico da serializzare, parametri per ignorare i dati non previsti, se utilizzare costrutti XML non standard per conservare i dati del riferimento all'oggetto nel grafico, un surrogato per la serializzazione personalizzata e un'alternativa per il mapping di dichiarazioni xsi:type in fase di esecuzione.
Metodo pubblico DataContractSerializer(Type, String, String, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate) Inizializza una nuova istanza della classe DataContractSerializer per serializzare o deserializzare un oggetto del tipo specificato. Questo metodo specifica inoltre un elenco di tipi conosciuti che possono essere presenti nell'oggetto grafico, il numero massimo di elementi dell'oggetto grafico da serializzare, parametri per ignorare i dati imprevisti, se utilizzare costrutti XML non standard per conservare i dati di riferimento all'oggetto nel grafico, un surrogato per la serializzazione personalizzata e l'elemento e lo spazio dei nomi XML che contengono il contenuto.
Metodo pubblico DataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate) Inizializza una nuova istanza della classe DataContractSerializer per serializzare o deserializzare un oggetto del tipo specificato. Questo metodo specifica inoltre un elenco di tipi conosciuti che possono essere presenti nell'oggetto grafico, il numero massimo di elementi dell'oggetto grafico da serializzare, parametri per ignorare i dati imprevisti, se utilizzare costrutti XML non standard per conservare i dati del riferimento all'oggetto nell'oggetto grafico, un surrogato per la serializzazione personalizzata e parametri di XmlDictionaryString che specificano l'elemento e lo spazio dei nomi XML che contengono il contenuto.
Metodo pubblico DataContractSerializer(Type, String, String, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver) Inizializza una nuova istanza della classe DataContractSerializer per serializzare o deserializzare un oggetto del tipo specificato. Questo metodo specifica inoltre un elenco di tipi conosciuti che possono essere presenti nell'oggetto grafico, il numero massimo di elementi dell'oggetto grafico da serializzare, parametri per ignorare i dati non previsti, se utilizzare costrutti XML non standard per conservare i dati del riferimento all'oggetto nel grafico, un surrogato per la serializzazione personalizzata, l'elemento e lo spazio dei nomi XML che includono il contenuto e un'alternativa per il mapping di dichiarazioni xsi:type in fase di esecuzione.
Metodo pubblico DataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver) Inizializza una nuova istanza della classe DataContractSerializer per serializzare o deserializzare un oggetto del tipo specificato. Questo metodo specifica inoltre un elenco di tipi conosciuti che possono essere presenti nell'oggetto grafico, il numero massimo di elementi dell'oggetto grafico da serializzare, parametri per ignorare i dati non previsti, se utilizzare costrutti XML non standard per conservare i dati del riferimento all'oggetto nel grafico, un surrogato per la serializzazione personalizzata, parametri di XmlDictionaryString che specificano l'elemento e lo spazio dei nomi XML che includono il contenuto e un'alternativa per il mapping di dichiarazioni xsi:type in fase di esecuzione.
In alto
Proprietà

  Nome Descrizione
Proprietà pubblica DataContractResolver Ottiene il componente utilizzato per eseguire il mapping in modo dinamico di dichiarazioni xsi:type a tipi di contratto conosciuti.
Proprietà pubblica DataContractSurrogate Ottiene un tipo surrogato in grado di estendere il processo di serializzazione o deserializzazione.
Proprietà pubblica ms405768.PortableClassLibrary(it-it,VS.100).gif IgnoreExtensionDataObject Ottiene un valore che specifica se ignorare i dati forniti da un'estensione della classe durante la serializzazione o la deserializzazione della classe stessa.
Proprietà pubblica ms405768.PortableClassLibrary(it-it,VS.100).gif KnownTypes Ottiene una raccolta di tipi che possono essere presenti nell'oggetto grafico serializzato utilizzando questa istanza di DataContractSerializer.
Proprietà pubblica ms405768.PortableClassLibrary(it-it,VS.100).gif MaxItemsInObjectGraph Ottiene il numero massimo di elementi di un oggetto grafico da serializzare o deserializzare.
Proprietà pubblica ms405768.PortableClassLibrary(it-it,VS.100).gif PreserveObjectReferences Ottiene un valore che specifica se utilizzare costrutti XML non standard per conservare i dati del riferimento all'oggetto.
In alto
Metodi

  Nome Descrizione
Metodo pubblico ms405768.PortableClassLibrary(it-it,VS.100).gif Equals(Object) Determina se l'oggetto Object specificato è uguale all'oggetto Object corrente. (Ereditato da Object)
Metodo protetto ms405768.PortableClassLibrary(it-it,VS.100).gif Finalize Consente a un oggetto di provare a liberare risorse ed eseguire altre operazioni di pulitura prima che l'oggetto stesso venga recuperato dalla procedura di Garbage Collection. (Ereditato da Object)
Metodo pubblico ms405768.PortableClassLibrary(it-it,VS.100).gif GetHashCode Funge da funzione hash per un determinato tipo. (Ereditato da Object)
Metodo pubblico ms405768.PortableClassLibrary(it-it,VS.100).gif GetType Ottiene l'oggetto Type dell'istanza corrente. (Ereditato da Object)
Metodo pubblico ms405768.PortableClassLibrary(it-it,VS.100).gif IsStartObject(XmlDictionaryReader) Determina se XmlDictionaryReader è posizionato su un oggetto che può essere deserializzato. (Esegue l'override di XmlObjectSerializer.IsStartObject(XmlDictionaryReader)).
Metodo pubblico ms405768.PortableClassLibrary(it-it,VS.100).gif IsStartObject(XmlReader) Determina se XmlReader è posizionato su un oggetto che può essere deserializzato. (Esegue l'override di XmlObjectSerializer.IsStartObject(XmlReader)).
Metodo protetto ms405768.PortableClassLibrary(it-it,VS.100).gif MemberwiseClone Consente di creare una copia dei riferimenti dell'oggetto Object corrente. (Ereditato da Object)
Metodo pubblico ms405768.PortableClassLibrary(it-it,VS.100).gif ReadObject(Stream) Legge il flusso o documento XML con una classe Stream e restituisce l'oggetto deserializzato. (Ereditato da XmlObjectSerializer)
Metodo pubblico ms405768.PortableClassLibrary(it-it,VS.100).gif ReadObject(XmlDictionaryReader) Legge il flusso o documento XML con una classe XmlDictionaryReader e restituisce l'oggetto deserializzato. (Ereditato da XmlObjectSerializer)
Metodo pubblico ms405768.PortableClassLibrary(it-it,VS.100).gif ReadObject(XmlReader) Legge il flusso XML con una classe XmlReader e restituisce l'oggetto deserializzato. (Esegue l'override di XmlObjectSerializer.ReadObject(XmlReader)).
Metodo pubblico ms405768.PortableClassLibrary(it-it,VS.100).gif ReadObject(XmlDictionaryReader, Boolean) Legge il flusso XML con un oggetto XmlDictionaryReader e restituisce l'oggetto deserializzato, specificando inoltre se viene eseguito un controllo per verificare il nome dell'oggetto prima della lettura del valore corrispondente. (Esegue l'override di XmlObjectSerializer.ReadObject(XmlDictionaryReader, Boolean)).
Metodo pubblico ms405768.PortableClassLibrary(it-it,VS.100).gif ReadObject(XmlReader, Boolean) Legge il flusso XML con un oggetto XmlReader e restituisce l'oggetto deserializzato, specificando inoltre se viene eseguito un controllo per verificare il nome dell'oggetto prima della lettura del valore corrispondente. (Esegue l'override di XmlObjectSerializer.ReadObject(XmlReader, Boolean)).
Metodo pubblico ReadObject(XmlDictionaryReader, Boolean, DataContractResolver) Legge un documento o un flusso di documenti XML e restituisce l'oggetto deserializzato. Il metodo include un parametro che consente di specificare se il nome dell'oggetto deve essere verificato e convalidato e un resolver per il mapping di dichiarazioni xsi:type in fase di esecuzione.
Metodo pubblico ms405768.PortableClassLibrary(it-it,VS.100).gif ToString Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object)
Metodo pubblico ms405768.PortableClassLibrary(it-it,VS.100).gif WriteEndObject(XmlDictionaryWriter) Scrive l'elemento XML di chiusura utilizzando un oggetto XmlDictionaryWriter. (Esegue l'override di XmlObjectSerializer.WriteEndObject(XmlDictionaryWriter)).
Metodo pubblico ms405768.PortableClassLibrary(it-it,VS.100).gif WriteEndObject(XmlWriter) Scrive l'elemento XML di chiusura utilizzando un oggetto XmlWriter. (Esegue l'override di XmlObjectSerializer.WriteEndObject(XmlWriter)).
Metodo pubblico ms405768.PortableClassLibrary(it-it,VS.100).gif WriteObject(Stream, Object) Scrive il contenuto completo (inizio, contenuto e fine) dell'oggetto nel documento XML o nel flusso con l'oggetto specificato Stream. (Ereditato da XmlObjectSerializer)
Metodo pubblico ms405768.PortableClassLibrary(it-it,VS.100).gif WriteObject(XmlDictionaryWriter, Object) Scrive il contenuto completo (inizio, contenuto e fine) dell'oggetto nel documento XML o nel flusso con l'oggetto specificato XmlDictionaryWriter. (Ereditato da XmlObjectSerializer)
Metodo pubblico ms405768.PortableClassLibrary(it-it,VS.100).gif WriteObject(XmlWriter, Object) Scrive tutti i dati dell'oggetto (elemento XML di apertura, contenuto ed elemento di chiusura) in un documento o flusso XML con una classe XmlWriter. (Esegue l'override di XmlObjectSerializer.WriteObject(XmlWriter, Object)).
Metodo pubblico WriteObject(XmlDictionaryWriter, Object, DataContractResolver) Scrive tutti i dati dell'oggetto (elemento XML di apertura, contenuto ed elemento di inclusione) in un documento o in un flusso XML utilizzando l'oggetto XmlDictionaryWriter specificato. Il metodo include un resolver per il mapping di dichiarazioni xsi:type in fase di esecuzione.
Metodo pubblico ms405768.PortableClassLibrary(it-it,VS.100).gif WriteObjectContent(XmlDictionaryWriter, Object) Scrive il contenuto XML utilizzando un oggetto XmlDictionaryWriter. (Esegue l'override di XmlObjectSerializer.WriteObjectContent(XmlDictionaryWriter, Object)).
Metodo pubblico ms405768.PortableClassLibrary(it-it,VS.100).gif WriteObjectContent(XmlWriter, Object) Scrive il contenuto XML utilizzando un oggetto XmlWriter. (Esegue l'override di XmlObjectSerializer.WriteObjectContent(XmlWriter, Object)).
Metodo pubblico ms405768.PortableClassLibrary(it-it,VS.100).gif WriteStartObject(XmlDictionaryWriter, Object) Scrive l'elemento XML di apertura utilizzando un oggetto XmlDictionaryWriter. (Esegue l'override di XmlObjectSerializer.WriteStartObject(XmlDictionaryWriter, Object)).
Metodo pubblico ms405768.PortableClassLibrary(it-it,VS.100).gif WriteStartObject(XmlWriter, Object) Scrive l'elemento XML di apertura utilizzando un oggetto XmlWriter. (Esegue l'override di XmlObjectSerializer.WriteStartObject(XmlWriter, Object)).
In alto
Note

Utilizzare la classe DataContractSerializer per serializzare e deserializzare le istanze di un tipo in un flusso o documento XML. Ad esempio, è possibile creare un tipo denominato Person con proprietà che contengono dati essenziali, ad esempio un nome e un indirizzo. È quindi possibile creare e modificare un'istanza della classe Person e scrivere tutti i valori delle relative proprietà in un documento XML per il recupero in un momento successivo o in un flusso XML per il trasporto immediato. La classe DataContractSerializer viene inoltre utilizzata per serializzare e deserializzare dati inviati nei messaggi di . Applicare l'attributo DataContractAttribute alle classi e l'attributo DataMemberAttribute ai membri delle classi per specificare le proprietà e i campi serializzati.

di tipi serializzabili, vedere Types Supported by the Data Contract Serializer.

Per utilizzare la classe DataContractSerializer, creare innanzitutto un'istanza di una classe e un oggetto appropriato per la scrittura o la lettura del formato; ad esempio, un'istanza della classe XmlDictionaryWriter. Chiamare quindi il metodo WriteObject per impostare i dati come persistenti. Per recuperare i dati, creare un oggetto appropriato per la lettura del formato dati (ad esempio una classe XmlDictionaryReader per un documento XML) e chiamare il metodo ReadObject.

Per ulteriori informazioni su sull'utilizzo della classe DataContractSerializer, vedere Using Stand-alone Serialization.

È possibile impostare il tipo di un serializzatore dei contratti dati utilizzando l'elemento <dataContractSerializer> in un file di configurazione dell'applicazione client.

Preparazione di classi per la serializzazione o la deserializzazione

La classe DataContractSerializer viene utilizzata insieme alle classi DataContractAttribute e DataMemberAttribute. Per preparare una classe per la serializzazione, applicare l'attributo DataContractAttribute alla classe. Per ogni membro della classe che restituisce dati che si desidera serializzare, applicare l'attributo DataMemberAttribute. È possibile serializzare campi e proprietà indipendentemente dall'accessibilità: privata, protetta, interna, protetta interna o pubblica.

Ad esempio, lo schema specifica un tipo Customer con una proprietà ID, ma esiste già un'applicazione che utilizza un tipo denominato Person con una proprietà Name. Per creare un tipo conforme al contratto, applicare innanzitutto l'attributo DataContractAttribute alla classe. Applicare quindi l'attributo DataMemberAttribute a ogni campo o proprietà che si desidera serializzare.

Nota Nota

È possibile applicare DataMemberAttribute a membri privati e pubblici.

Il formato finale dell'XML non deve necessariamente essere testo. La classe DataContractSerializer scrive i dati come infoset XML, che consente la scrittura dei dati in qualsiasi formato riconosciuto dalle classi XmlReader e XmlWriter. È consigliabile utilizzare le classi XmlDictionaryReader e XmlDictionaryWriter per leggere e scrivere, poiché entrambe sono ottimizzate per l'utilizzo con la classe DataContractSerializer.

Se si sta creando una classe con campi o proprietà che devono essere popolati prima della serializzazione o della deserializzazione, utilizzare attributi di callback, come descritto in Version Tolerant Serialization Callbacks.

Aggiunta di tipi alla raccolta dei tipi conosciuti

Durante la serializzazione o deserializzazione di un oggetto, è necessario che il tipo sia "conosciuto" dalla classe DataContractSerializer. Creare innanzitutto un'istanza di una classe che implementa l'interfaccia IEnumerable<T> (ad esempio la classe List<T>) e aggiungere i tipi conosciuti alla raccolta. Creare quindi un'istanza della classe DataContractSerializer utilizzando uno degli overload che accetta l'interfaccia IEnumerable<T> (ad esempio, DataContractSerializer(Type, IEnumerable<Type>).

Nota Nota

A differenza di altri tipi di primitivi, la struttura DateTimeOffset non è un tipo conosciuto per impostazione predefinita, pertanto deve essere aggiunta manualmente all'elenco dei tipi conosciuti (vedere Data Contract Known Types).

Compatibilità con versioni successive

La classe DataContractSerializer comprende contratti dati progettati per essere compatibili con versioni future del contratto. Tali tipi implementano l'interfaccia IExtensibleDataObject. L'interfaccia comprende la proprietà ExtensionData che restituisce un oggetto ExtensionDataObject. Per ulteriori informazioni, vedereForward Compatible Data Contracts.

Esecuzione con attendibilità parziale

Quando si crea un'istanza dell'oggetto di destinazione durante la deserializzazione, la classe DataContractSerializer non chiama il costruttore dell'oggetto di destinazione. Se si crea un tipo [DataContract] accessibile in attendibilità parziale (ovvero un tipo pubblico in un assembly al quale è applicato l'attributo AllowPartiallyTrustedCallers) e che esegue azioni correlate alla sicurezza, tenere presente che il costruttore non viene chiamato. In particolare, non è possibile utilizzare le tecniche seguenti:

  • Se si tenta di limitare l'accesso in attendibilità parziale rendendo interno o privato il costruttore oppure aggiungendo un oggetto LinkDemand al costruttore, nessuno dei due elementi determinerà alcun effetto durante la deserializzazione in attendibilità parziale.

  • Se si codifica la classe che presuppone che il costruttore sia stato eseguito, si può portare la classe in uno stato interno non valido vulnerabile.

Esempi

Nell'esempio di codice seguente viene illustrato un tipo denominato Person serializzato dalla classe DataContractSerializer. L'attributo DataContractAttribute viene applicato alla classe e DataMemberAttribute viene applicato ai membri per indicare a DataContractSerializer gli elementi da serializzare.

Visual Basic

' You must apply a DataContractAttribute or SerializableAttribute
' to a class to have it serialized by the DataContractSerializer.
<DataContract(Name := "Customer", [Namespace] := "http://www.contoso.com")>  _
Class Person
    Implements IExtensibleDataObject
    <DataMember()>  _
    Public FirstName As String
    <DataMember()>  _
    Public LastName As String
    <DataMember()>  _
    Public ID As Integer

    Public Sub New(ByVal newfName As String, ByVal newLName As String, ByVal newID As Integer) 
        FirstName = newfName
        LastName = newLName
        ID = newID
    End Sub 

    Private extensionData_Value As ExtensionDataObject

    Public Property ExtensionData() As ExtensionDataObject Implements _
       IExtensibleDataObject.ExtensionData
        Get
            Return extensionData_Value
        End Get
        Set
            extensionData_Value = value
        End Set
    End Property
End Class 


NotInheritable Public Class Test

    Private Sub New() 

    End Sub 

    Public Shared Sub Main() 
        Try
            WriteObject("DataContractSerializerExample.xml")
            ReadObject("DataContractSerializerExample.xml")

        Catch serExc As SerializationException
            Console.WriteLine("Serialization Failed")
            Console.WriteLine(serExc.Message)
        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 WriteObject(ByVal fileName As String) 
        Console.WriteLine("Creating a Person object and serializing it.")
        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 ReadObject(ByVal fileName As String) 
        Console.WriteLine("Deserializing an instance of the object.")
        Dim fs As New FileStream(fileName, FileMode.Open)
        Dim reader As XmlDictionaryReader = _
            XmlDictionaryReader.CreateTextReader(fs, New XmlDictionaryReaderQuotas())
        Dim ser As New DataContractSerializer(GetType(Person))

        ' Deserialize the data and read it from the instance.
        Dim deserializedPerson As Person = CType(ser.ReadObject(reader, True), Person)
        reader.Close()
        fs.Close()
        Console.WriteLine(String.Format("{0} {1}, ID: {2}", deserializedPerson.FirstName, deserializedPerson.LastName, deserializedPerson.ID))
    End Sub 
End Class 


C#

namespace DataContractSerializerExample
{
    using System;
    using System.Collections;
    using System.Collections.Generic;
    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(Name = "Customer", Namespace = "http://www.contoso.com")]
    class Person : IExtensibleDataObject
    {
        [DataMember()]
        public string FirstName;
        [DataMember]
        public string LastName;
        [DataMember()]
        public int ID;

        public Person(string newfName, string newLName, int newID)
        {
            FirstName = newfName;
            LastName = newLName;
            ID = newID;
        }

        private ExtensionDataObject extensionData_Value;

        public ExtensionDataObject ExtensionData
        {
            get
            {
                return extensionData_Value;
            }
            set
            {
                extensionData_Value = value;
            }
        }
    }

    public sealed class Test
    {
        private Test() { }

        public static void Main()
        {
            try
            {
                WriteObject("DataContractSerializerExample.xml");
                ReadObject("DataContractSerializerExample.xml");

            }

            catch (SerializationException serExc)
            {
                Console.WriteLine("Serialization Failed");
                Console.WriteLine(serExc.Message);
            }
            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)
        {
            Console.WriteLine(
                "Creating a Person object and serializing it.");
            Person p1 = new Person("Zighetti", "Barbara", 101);
            FileStream writer = new FileStream(fileName, FileMode.Create);
            DataContractSerializer ser =
                new DataContractSerializer(typeof(Person));
            ser.WriteObject(writer, p1);
            writer.Close();
        }

        public static void ReadObject(string fileName)
        {
            Console.WriteLine("Deserializing an instance of the object.");
            FileStream fs = new FileStream(fileName,
            FileMode.Open);
            XmlDictionaryReader reader =
                XmlDictionaryReader.CreateTextReader(fs, new XmlDictionaryReaderQuotas());
            DataContractSerializer ser = new DataContractSerializer(typeof(Person));

            // Deserialize the data and read it from the instance.
            Person deserializedPerson =
                (Person)ser.ReadObject(reader, true);
            reader.Close();
            fs.Close();
            Console.WriteLine(String.Format("{0} {1}, ID: {2}",
            deserializedPerson.FirstName, deserializedPerson.LastName,
            deserializedPerson.ID));
        }
    }


Informazioni sulla versione

.NET Framework

Supportato in: 4, 3.5, 3.0

.NET Framework Client Profile

Supportato in: 4, 3.5 SP1

Supportato in:
Piattaforme

Windows 7, Windows Vista SP1 o versione successiva, Windows XP SP3, Windows Server 2008 (componenti di base del server non supportati), Windows Server 2008 R2 (componenti di base del server supportati con SP1 o versione successiva), Windows Server 2003 SP2

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.
Codice thread safe

Qualsiasi membro static (Shared in Visual Basic) pubblico di questo tipo è thread-safe. I membri di istanza non sono garantiti come thread-safe.
Vedere anche

Riferimenti