DataContractSerializer Classe

Definizione

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

public ref class DataContractSerializer sealed : System::Runtime::Serialization::XmlObjectSerializer
public sealed class DataContractSerializer : System.Runtime.Serialization.XmlObjectSerializer
type DataContractSerializer = class
    inherit XmlObjectSerializer
Public NotInheritable Class DataContractSerializer
Inherits XmlObjectSerializer
Ereditarietà
DataContractSerializer

Commenti

Utilizzare la DataContractSerializer classe per serializzare e deserializzare le istanze di un tipo in un flusso o in un 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 Person classe e scrivere tutti i relativi valori di proprietà in un documento XML per il recupero successivo o in un flusso XML per il trasporto immediato. La cosa più importante, viene usato DataContractSerializer per serializzare e deserializzare i dati inviati nei messaggi di Windows Communication Foundation (WCF). Applicare l'attributo DataContractAttribute alle classi e l'attributo DataMemberAttribute ai membri della classe per specificare proprietà e campi serializzati.

Per un elenco di tipi che possono essere serializzati, vedere Tipi supportati dal serializzatore del contratto dati.

Per utilizzare il DataContractSerializer, creare prima un'istanza di una classe e un oggetto appropriato per scrivere o leggere il formato, ad esempio un'istanza del XmlDictionaryWriter. Chiamare quindi il WriteObject metodo per rendere persistenti i dati. Per recuperare i dati, creare un oggetto appropriato per leggere il formato di dati , ad esempio un XmlDictionaryReader oggetto per un documento XML, e chiamare il ReadObject metodo .

Per altre informazioni sull'uso di DataContractSerializer, vedere Serializzazione e deserializzazione.

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

Preparare le classi per la serializzazione o la deserializzazione

DataContractSerializer viene utilizzato in combinazione con le classi DataContractAttribute e DataMemberAttribute. Per preparare una classe per la serializzazione, applicare il DataContractAttribute alla classe. Per ogni membro della classe che restituisce i dati da serializzare, applicare il DataMemberAttribute. È possibile serializzare campi e proprietà, indipendentemente dall'accessibilità: privato, protetto, interno, protetto interno o pubblico.

Ad esempio, lo schema specifica un oggetto con una CustomerID proprietà , ma è già disponibile un'applicazione esistente che usa un tipo denominato Person con una Name proprietà . Per creare un tipo conforme al contratto, applicare prima l'oggetto DataContractAttribute alla classe . Quindi, applica DataMemberAttribute a ogni campo o proprietà che si desidera serializzare.

Note

È possibile applicare il DataMemberAttribute a membri sia privati che pubblici.

Il formato finale del codice XML non deve essere testo. Scrive invece DataContractSerializer i dati come infoset XML, che consente di scrivere i dati in qualsiasi formato riconosciuto da XmlReader e XmlWriter. È consigliabile usare le XmlDictionaryReader classi e XmlDictionaryWriter per leggere e scrivere, perché entrambe sono ottimizzate per l'uso con .DataContractSerializer

Se si crea una classe con campi o proprietà che devono essere popolati prima che si verifichi la serializzazione o la deserializzazione, usare gli attributi di callback, come descritto in Version-Tolerant Callback di serializzazione.

Aggiungere alla raccolta di tipi noti

Durante la serializzazione o la deserializzazione di un oggetto, è necessario che il tipo sia "noto" a DataContractSerializer. Iniziare creando un'istanza di una classe che implementa IEnumerable<T> (ad esempio List<T>) e aggiungendo i tipi noti alla raccolta. Quindi, crea un'istanza di DataContractSerializer usando uno degli overload che accettano IEnumerable<T>, ad esempio DataContractSerializer(Type, IEnumerable<Type>).

Note

A differenza di altri tipi primitivi, la DateTimeOffset struttura non è un tipo noto per impostazione predefinita, quindi deve essere aggiunta manualmente all'elenco dei tipi noti (vedere Tipi noti del contratto dati).

Compatibilità futura

DataContractSerializer Comprende i contratti dati progettati per essere compatibili con le versioni future del contratto. Tali tipi implementano l'interfaccia IExtensibleDataObject . L'interfaccia include la ExtensionData proprietà che restituisce un ExtensionDataObject oggetto . Per altre informazioni, vedere Forward-Compatible Contratti dati.

Costruttori

Nome Descrizione
DataContractSerializer(Type, DataContractSerializerSettings)

Inizializza una nuova istanza della DataContractSerializer classe per serializzare o deserializzare un oggetto del tipo e delle impostazioni specificati.

DataContractSerializer(Type, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver)

Inizializza una nuova istanza della DataContractSerializer classe per serializzare o deserializzare un oggetto del tipo specificato. Questo metodo specifica anche un elenco di tipi noti che possono essere presenti nell'oggetto grafico, il numero massimo di elementi del grafo da serializzare, parametri per ignorare i dati imprevisti, se utilizzare costrutti XML non standard per mantenere i dati di riferimento degli oggetti nel grafico, un surrogato per la serializzazione personalizzata e un'alternativa per le dichiarazioni di mapping xsi:type in fase di esecuzione.

DataContractSerializer(Type, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate)

Inizializza una nuova istanza della DataContractSerializer classe per serializzare o deserializzare un oggetto del tipo specificato. Questo metodo specifica anche un elenco di tipi noti che possono essere presenti nell'oggetto grafico, il numero massimo di elementi del grafo da serializzare, parametri per ignorare i dati imprevisti, se utilizzare costrutti XML non standard per mantenere i dati di riferimento agli oggetti nel grafico e un surrogato per la serializzazione personalizzata.

DataContractSerializer(Type, IEnumerable<Type>)

Inizializza una nuova istanza della DataContractSerializer classe per serializzare o deserializzare un oggetto del tipo specificato e una raccolta di tipi noti che possono essere presenti nell'oggetto grafico.

DataContractSerializer(Type, String, String, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver)

Inizializza una nuova istanza della DataContractSerializer classe per serializzare o deserializzare un oggetto del tipo specificato. Questo metodo specifica anche un elenco di tipi noti che possono essere presenti nell'oggetto grafico, il numero massimo di elementi del grafo da serializzare, parametri per ignorare i dati imprevisti, se utilizzare costrutti XML non standard per mantenere i dati di riferimento agli oggetti nel grafico, un surrogato per la serializzazione personalizzata, l'elemento XML e lo spazio dei nomi che contiene il contenuto, e un'alternativa per le dichiarazioni di mapping xsi:type in fase di esecuzione.

DataContractSerializer(Type, String, String, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate)

Inizializza una nuova istanza della DataContractSerializer classe per serializzare o deserializzare un oggetto del tipo specificato. Questo metodo specifica anche un elenco di tipi noti che possono essere presenti nell'oggetto grafico, il numero massimo di elementi del grafo da serializzare, parametri per ignorare i dati imprevisti, se utilizzare costrutti XML non standard per mantenere i dati di riferimento agli oggetti nel grafico, un surrogato per la serializzazione personalizzata e l'elemento XML e lo spazio dei nomi che contengono il contenuto.

DataContractSerializer(Type, String, String, IEnumerable<Type>)

Inizializza una nuova istanza della DataContractSerializer classe per serializzare o deserializzare un oggetto del tipo specificato. Questo metodo specifica anche l'elemento XML radice e lo spazio dei nomi in due parametri stringa, nonché un elenco di tipi noti che possono essere presenti nell'oggetto grafico.

DataContractSerializer(Type, String, String)

Inizializza una nuova istanza della DataContractSerializer classe per serializzare o deserializzare un oggetto del tipo specificato utilizzando l'elemento radice e lo spazio dei nomi XML forniti.

DataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver)

Inizializza una nuova istanza della DataContractSerializer classe per serializzare o deserializzare un oggetto del tipo specificato. Questo metodo specifica anche un elenco di tipi noti che possono essere presenti nell'oggetto grafico, il numero massimo di elementi del grafo da serializzare, parametri per ignorare i dati imprevisti, se utilizzare costrutti XML non standard per mantenere i dati di riferimento agli oggetti nel grafico, un surrogato per la serializzazione personalizzata, parametri di XmlDictionaryString che specificano l'elemento XML e lo spazio dei nomi che contiene il contenuto, e un'alternativa per le dichiarazioni di mapping xsi:type in fase di esecuzione.

DataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate)

Inizializza una nuova istanza della DataContractSerializer classe per serializzare o deserializzare un oggetto del tipo specificato. Questo metodo specifica anche un elenco di tipi noti che possono essere presenti nell'oggetto grafico, il numero massimo di elementi del grafico da serializzare, parametri per ignorare i dati imprevisti, se utilizzare costrutti XML non standard per mantenere i dati di riferimento agli oggetti nel grafico, un surrogato per la serializzazione personalizzata e parametri di XmlDictionaryString che specificano l'elemento XML e lo spazio dei nomi che contengono il contenuto.

DataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>)

Inizializza una nuova istanza della DataContractSerializer classe per serializzare o deserializzare un oggetto del tipo specificato. Questo metodo specifica anche l'elemento XML radice e lo spazio dei nomi in due XmlDictionaryString parametri, nonché un elenco di tipi noti che possono essere presenti nell'oggetto grafico.

DataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString)

Inizializza una nuova istanza della DataContractSerializer classe per serializzare o deserializzare un oggetto del tipo specificato utilizzando l'elemento radice XML e lo spazio dei nomi specificati tramite i parametri di tipo XmlDictionaryString.

DataContractSerializer(Type)

Inizializza una nuova istanza della DataContractSerializer classe per serializzare o deserializzare un oggetto del tipo specificato.

Proprietà

Nome Descrizione
DataContractResolver

Ottiene il componente utilizzato per eseguire il mapping xsi:type dinamico delle dichiarazioni ai tipi di contratto noti.

DataContractSurrogate

Ottiene un tipo surrogato che può estendere il processo di serializzazione o deserializzazione.

IgnoreExtensionDataObject

Ottiene un valore che specifica se ignorare i dati forniti da un'estensione della classe quando la classe viene serializzata o deserializzata.

KnownTypes

Ottiene una raccolta di tipi che possono essere presenti nel grafico dell'oggetto serializzato utilizzando questa istanza di DataContractSerializer.

MaxItemsInObjectGraph

Ottiene il numero massimo di elementi in un oggetto grafico da serializzare o deserializzare.

PreserveObjectReferences

Ottiene un valore che specifica se utilizzare costrutti XML non standard per mantenere i dati di riferimento agli oggetti.

SerializeReadOnlyTypes

Ottiene un valore che specifica se i tipi di sola lettura vengono serializzati.

Metodi

Nome Descrizione
Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetType()

Ottiene il Type dell'istanza corrente.

(Ereditato da Object)
IsStartObject(XmlDictionaryReader)

Determina se l'oggetto XmlDictionaryReader è posizionato su un oggetto che può essere deserializzato.

IsStartObject(XmlReader)

Determina se l'oggetto XmlReader è posizionato su un oggetto che può essere deserializzato.

MemberwiseClone()

Crea una copia superficiale del Objectcorrente.

(Ereditato da Object)
ReadObject(Stream)

Legge il flusso o il documento XML con un Stream oggetto e restituisce l'oggetto deserializzato.

(Ereditato da XmlObjectSerializer)
ReadObject(XmlDictionaryReader, Boolean, DataContractResolver)

Legge un documento XML o un flusso di documenti e restituisce l'oggetto deserializzato. Il metodo include un parametro per specificare se il nome dell'oggetto viene verificato e un resolver per le dichiarazioni di mapping xsi:type in fase di esecuzione.

ReadObject(XmlDictionaryReader, Boolean)

Legge il flusso XML con un XmlDictionaryReader oggetto e restituisce l'oggetto deserializzato e specifica anche se viene eseguito un controllo per verificare il nome dell'oggetto prima di leggerne il valore.

ReadObject(XmlDictionaryReader)

Legge il documento o il flusso XML con un XmlDictionaryReader oggetto e restituisce l'oggetto deserializzato.

(Ereditato da XmlObjectSerializer)
ReadObject(XmlReader, Boolean)

Legge il flusso XML con un XmlReader oggetto e restituisce l'oggetto deserializzato e specifica anche se viene eseguito un controllo per verificare il nome dell'oggetto prima di leggerne il valore.

ReadObject(XmlReader)

Legge il flusso XML con un oggetto XmlReader e restituisce l'oggetto deserializzato.

ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)
WriteEndObject(XmlDictionaryWriter)

Scrive l'elemento XML di chiusura utilizzando un oggetto XmlDictionaryWriter.

WriteEndObject(XmlWriter)

Scrive l'elemento XML di chiusura utilizzando un oggetto XmlWriter.

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)
WriteObject(XmlDictionaryWriter, Object, DataContractResolver)

Scrive tutti i dati dell'oggetto (elemento XML iniziale, contenuto e elemento di inclusione) in un documento o un flusso XML usando l'elemento XmlDictionaryWriter specificato. Il metodo include un sistema di risoluzione per le dichiarazioni di mapping xsi:type in fase di esecuzione.

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)
WriteObject(XmlWriter, Object)

Scrive tutti i dati dell'oggetto (elemento XML iniziale, contenuto e elemento di chiusura) in un documento o un flusso XML con un oggetto XmlWriter.

WriteObjectContent(XmlDictionaryWriter, Object)

Scrive il contenuto XML utilizzando un oggetto XmlDictionaryWriter.

WriteObjectContent(XmlWriter, Object)

Scrive il contenuto XML utilizzando un oggetto XmlWriter.

WriteStartObject(XmlDictionaryWriter, Object)

Scrive l'elemento XML di apertura utilizzando un oggetto XmlDictionaryWriter.

WriteStartObject(XmlWriter, Object)

Scrive l'elemento XML di apertura utilizzando un oggetto XmlWriter.

Metodi di estensione

Nome Descrizione
GetSerializationSurrogateProvider(DataContractSerializer)

Restituisce il provider di serializzazione surrogato per questo serializzatore.

SetSerializationSurrogateProvider(DataContractSerializer, ISerializationSurrogateProvider)

Specifica un provider di serializzazione surrogato per questo DataContractSerializeroggetto .

Si applica a

Thread safety

Le istanze di questa classe sono thread-safe tranne quando l'istanza viene usata con un'implementazione di IDataContractSurrogate o DataContractResolver.

Vedi anche