DataContractSerializer Classe

Definição

Serializa e desserializa uma instância de um tipo em um fluxo XML ou documento usando um contrato de dados fornecido. Essa classe não pode ser herdada.

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
Herança
DataContractSerializer

Comentários

Use a classe DataContractSerializer para serializar e desserializar instâncias de um tipo em um fluxo XML ou documento. Por exemplo, você pode criar um tipo nomeado Person com propriedades que contêm dados essenciais, como um nome e um endereço. Em seguida, você pode criar e manipular uma instância da Person classe e gravar todos os seus valores de propriedade em um documento XML para recuperação posterior ou em um fluxo XML para transporte imediato. Mais importante, o DataContractSerializer é usado para serializar e desserializar dados enviados em mensagens do WCF (Windows Communication Foundation). Aplique o DataContractAttribute atributo às classes e o DataMemberAttribute atributo aos membros da classe para especificar propriedades e campos serializados.

Para obter uma lista de tipos que podem ser serializados, consulte Tipos compatíveis com o Serializador de Contrato de Dados.

Para usar a DataContractSerializer, primeiro crie uma instância de uma classe e um objeto apropriado para escrever ou ler o formato; por exemplo, uma instância do XmlDictionaryWriter. Em seguida, chame o WriteObject método para persistir os dados. Para recuperar dados, crie um objeto apropriado para ler o formato de dados (como um XmlDictionaryReader documento XML) e chame o ReadObject método.

Para obter mais informações sobre como usar o DataContractSerializer, consulte a serialização e a desserialização.

Você pode definir o tipo de um serializador de contrato de dados usando o <elemento dataContractSerializer> em um arquivo de configuração de aplicativo cliente.

Preparar classes para serialização ou desserialização

O DataContractSerializer é usado em combinação com as classes DataContractAttribute e DataMemberAttribute. Para preparar uma classe para serialização, aplique DataContractAttribute à classe. Para cada membro da classe que retorna dados que você deseja serializar, aplique o DataMemberAttribute. Você pode serializar campos e propriedades, independentemente do nível de acesso: privado, protegido, interno, protegido interno ou público.

Por exemplo, seu esquema especifica um Customer com uma ID propriedade, mas você já tem um aplicativo existente que usa um tipo nomeado Person com uma Name propriedade. Para criar um tipo que esteja em conformidade com o contrato, primeiro aplique-o DataContractAttribute à classe. Em seguida, aplique DataMemberAttribute a todos os campos ou propriedades que você deseja serializar.

Note

Você pode aplicar o DataMemberAttribute aos membros privados e públicos.

O formato final do XML não precisa ser texto. Em vez disso, o DataContractSerializer grava os dados como um conjunto de informações XML, o que permite gravar os dados em qualquer formato reconhecido pelo XmlReader e pelo XmlWriter. É recomendável que você use as classes XmlDictionaryReader e XmlDictionaryWriter para leitura e gravação, pois ambas são otimizadas para trabalhar com o DataContractSerializer.

Se você estiver criando uma classe que tenha campos ou propriedades que devem ser populadas antes que a serialização ou desserialização ocorra, use atributos de retorno de chamada, conforme descrito em Version-Tolerant Retornos de Chamada de Serialização.

Adicionar à coleção de tipos conhecidos

Ao serializar ou desserializar um objeto, é necessário que o tipo seja "conhecido" pelo DataContractSerializer. Comece criando uma instância de uma classe que implementa IEnumerable<T> (como List<T>) e adicione os tipos conhecidos à coleção. Em seguida, crie uma instância do DataContractSerializer usando uma das sobrecargas que utiliza o IEnumerable<T> (por exemplo, DataContractSerializer(Type, IEnumerable<Type>)).

Note

Ao contrário de outros tipos primitivos, a DateTimeOffset estrutura não é um tipo conhecido por padrão, portanto, ela deve ser adicionada manualmente à lista de tipos conhecidos (consulte Tipos Conhecidos do Contrato de Dados).

Compatibilidade futura

O DataContractSerializer entende contratos de dados que foram projetados para serem compatíveis com versões futuras do contrato. Esses tipos implementam a IExtensibleDataObject interface. A interface apresenta a ExtensionData propriedade que retorna um ExtensionDataObject objeto. Para obter mais informações, consulte Forward-Compatible Data Contracts.

Construtores

Nome Description
DataContractSerializer(Type, DataContractSerializerSettings)

Inicializa uma nova instância da DataContractSerializer classe para serializar ou desserializar um objeto do tipo e das configurações especificados.

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

Inicializa uma nova instância da DataContractSerializer classe para serializar ou desserializar um objeto do tipo especificado. Esse método também especifica uma lista de tipos conhecidos que podem estar presentes no grafo de objeto, o número máximo de itens de grafo a serem serializados, parâmetros para ignorar dados inesperados, se devem usar constructos XML não padrão para preservar dados de referência de objeto no grafo, um substituto para serialização personalizada e uma alternativa para mapear xsi:type declarações em tempo de execução.

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

Inicializa uma nova instância da DataContractSerializer classe para serializar ou desserializar um objeto do tipo especificado. Esse método também especifica uma lista de tipos conhecidos que podem estar presentes no grafo de objeto, o número máximo de itens de grafo a serem serializados, parâmetros para ignorar dados inesperados, se devem usar constructos XML não padrão para preservar dados de referência de objeto no grafo e um substituto para serialização personalizada.

DataContractSerializer(Type, IEnumerable<Type>)

Inicializa uma nova instância da DataContractSerializer classe para serializar ou desserializar um objeto do tipo especificado e uma coleção de tipos conhecidos que podem estar presentes no grafo de objeto.

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

Inicializa uma nova instância da DataContractSerializer classe para serializar ou desserializar um objeto do tipo especificado. Esse método também especifica uma lista de tipos conhecidos que podem estar presentes no grafo de objeto, o número máximo de itens de grafo a serem serializados, parâmetros para ignorar dados inesperados, se devem usar constructos XML não padrão para preservar dados de referência de objeto no grafo, um substituto para serialização personalizada, o elemento XML e o namespace que contém o conteúdo, e uma alternativa para mapear xsi:type declarações em tempo de execução.

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

Inicializa uma nova instância da DataContractSerializer classe para serializar ou desserializar um objeto do tipo especificado. Esse método também especifica uma lista de tipos conhecidos que podem estar presentes no grafo de objeto, o número máximo de itens de grafo a serem serializados, parâmetros para ignorar dados inesperados, se devem usar constructos XML não padrão para preservar dados de referência de objeto no grafo, um substituto para serialização personalizada e o elemento XML e o namespace que contêm o conteúdo.

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

Inicializa uma nova instância da DataContractSerializer classe para serializar ou desserializar um objeto do tipo especificado. Esse método também especifica o elemento XML raiz e o namespace em dois parâmetros de cadeia de caracteres, bem como uma lista de tipos conhecidos que podem estar presentes no grafo do objeto.

DataContractSerializer(Type, String, String)

Inicializa uma nova instância da DataContractSerializer classe para serializar ou desserializar um objeto do tipo especificado usando o elemento raiz XML fornecido e o namespace.

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

Inicializa uma nova instância da DataContractSerializer classe para serializar ou desserializar um objeto do tipo especificado. Esse método também especifica uma lista de tipos conhecidos que podem estar presentes no grafo de objeto, o número máximo de itens de grafo a serem serializados, parâmetros para ignorar dados inesperados, se devem usar construções XML não padrão para preservar dados de referência de objeto no grafo, um substituto para serialização personalizada, parâmetros que XmlDictionaryString especificam o elemento XML e o namespace que contém o conteúdo, e uma alternativa para mapear xsi:type declarações em tempo de execução.

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

Inicializa uma nova instância da DataContractSerializer classe para serializar ou desserializar um objeto do tipo especificado. Esse método também especifica uma lista de tipos conhecidos que podem estar presentes no grafo de objeto, o número máximo de itens de grafo a serem serializados, parâmetros para ignorar dados inesperados, se devem usar constructos XML não padrão para preservar dados de referência de objeto no grafo, um substituto para serialização personalizada e parâmetros que XmlDictionaryString especificam o elemento XML e o namespace que contêm o conteúdo.

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

Inicializa uma nova instância da DataContractSerializer classe para serializar ou desserializar um objeto do tipo especificado. Esse método também especifica o elemento XML raiz e o namespace em dois XmlDictionaryString parâmetros, bem como uma lista de tipos conhecidos que podem estar presentes no grafo do objeto.

DataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString)

Inicializa uma nova instância da DataContractSerializer classe para serializar ou desserializar um objeto do tipo especificado usando o elemento raiz XML e o namespace especificados por meio dos parâmetros do tipo XmlDictionaryString.

DataContractSerializer(Type)

Inicializa uma nova instância da DataContractSerializer classe para serializar ou desserializar um objeto do tipo especificado.

Propriedades

Nome Description
DataContractResolver

Obtém o componente usado para mapear xsi:type dinamicamente declarações para tipos de contrato conhecidos.

DataContractSurrogate

Obtém um tipo alternativo que pode estender o processo de serialização ou desserialização.

IgnoreExtensionDataObject

Obtém um valor que especifica se os dados fornecidos por uma extensão da classe devem ser ignorados quando a classe está sendo serializada ou desserializada.

KnownTypes

Obtém uma coleção de tipos que podem estar presentes no grafo de objeto serializado usando essa instância do DataContractSerializer.

MaxItemsInObjectGraph

Obtém o número máximo de itens em um grafo de objeto para serializar ou desserializar.

PreserveObjectReferences

Obtém um valor que especifica se os constructos XML não padrão devem ser usados para preservar dados de referência de objeto.

SerializeReadOnlyTypes

Obtém um valor que especifica se os tipos somente leitura são serializados.

Métodos

Nome Description
Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
IsStartObject(XmlDictionaryReader)

Determina se o XmlDictionaryReader objeto está posicionado em um objeto que pode ser desserializado.

IsStartObject(XmlReader)

Determina se o XmlReader objeto está posicionado em um objeto que pode ser desserializado.

MemberwiseClone()

Cria uma cópia superficial do Objectatual.

(Herdado de Object)
ReadObject(Stream)

Lê o fluxo XML ou o documento com um Stream e retorna o objeto desserializado.

(Herdado de XmlObjectSerializer)
ReadObject(XmlDictionaryReader, Boolean, DataContractResolver)

Lê um documento XML ou fluxo de documentos e retorna o objeto desserializado. O método inclui um parâmetro para especificar se o nome do objeto é verificado é validado e um resolvedor para declarações de mapeamento xsi:type em runtime.

ReadObject(XmlDictionaryReader, Boolean)

Lê o fluxo XML com um XmlDictionaryReader objeto desserializado e também especifica se uma verificação é feita para verificar o nome do objeto antes de ler seu valor.

ReadObject(XmlDictionaryReader)

Lê o documento XML ou o fluxo com um XmlDictionaryReader e retorna o objeto desserializado.

(Herdado de XmlObjectSerializer)
ReadObject(XmlReader, Boolean)

Lê o fluxo XML com um XmlReader objeto desserializado e também especifica se uma verificação é feita para verificar o nome do objeto antes de ler seu valor.

ReadObject(XmlReader)

Lê o fluxo XML com um XmlReader e retorna o objeto desserializado.

ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)
WriteEndObject(XmlDictionaryWriter)

Grava o elemento XML de fechamento usando um XmlDictionaryWriter.

WriteEndObject(XmlWriter)

Grava o elemento XML de fechamento usando um XmlWriter.

WriteObject(Stream, Object)

Grava o conteúdo completo (início, conteúdo e término) do objeto no documento XML ou no fluxo com o especificado Stream.

(Herdado de XmlObjectSerializer)
WriteObject(XmlDictionaryWriter, Object, DataContractResolver)

Grava todos os dados do objeto (elemento XML inicial, conteúdo e elemento delimitador) em um documento XML ou fluxo usando o XmlDictionaryWriter especificado. O método inclui um resolvedor para declarações de mapeamento xsi:type em runtime.

WriteObject(XmlDictionaryWriter, Object)

Grava o conteúdo completo (início, conteúdo e término) do objeto no documento XML ou no fluxo com o especificado XmlDictionaryWriter.

(Herdado de XmlObjectSerializer)
WriteObject(XmlWriter, Object)

Grava todos os dados do objeto (elemento XML inicial, conteúdo e elemento de fechamento) em um documento XML ou fluxo com um XmlWriter.

WriteObjectContent(XmlDictionaryWriter, Object)

Grava o conteúdo XML usando um XmlDictionaryWriter.

WriteObjectContent(XmlWriter, Object)

Grava o conteúdo XML usando um XmlWriter.

WriteStartObject(XmlDictionaryWriter, Object)

Grava o elemento XML de abertura usando um XmlDictionaryWriter.

WriteStartObject(XmlWriter, Object)

Grava o elemento XML de abertura usando um XmlWriter.

Métodos de Extensão

Nome Description
GetSerializationSurrogateProvider(DataContractSerializer)

Retorna o provedor de serialização substituto para esse serializador.

SetSerializationSurrogateProvider(DataContractSerializer, ISerializationSurrogateProvider)

Especifica um provedor de serialização alternativo para isso DataContractSerializer.

Aplica-se a

Acesso thread-safe

As instâncias dessa classe são thread-safe, exceto quando a instância é usada com uma implementação do IDataContractSurrogate ou DataContractResolver.

Confira também