DataContractSerializer Classe

Definição

Serializa e desserializa uma instância de um tipo num fluxo ou documento XML usando um contrato de dados fornecido. Esta 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

Observações

Utilize a classe DataContractSerializer para serializar e desserializar instâncias de um tipo em um fluxo ou documento XML. Por exemplo, você pode criar um tipo nomeado Person com propriedades que contêm dados essenciais, como um nome e 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 Windows Communication Foundation (WCF). Aplique o atributo DataContractAttribute a classes e o atributo DataMemberAttribute a membros de classe para especificar propriedades e campos que são serializados.

Para obter uma lista de tipos que podem ser serializados, consulte Tipos suportados pelo Data Contract Serializer.

Para usar o 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 para um documento XML) e chame o ReadObject método.

Para obter mais informações sobre como usar o DataContractSerializer, consulte Serialização e 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 DataContractAttribute classes e DataMemberAttribute . Para preparar uma classe para serialização, aplique o DataContractAttribute à classe. Para cada membro da classe que retorna dados que você deseja serializar, aplique o DataMemberAttribute. Você pode serializar campos e propriedades, independentemente da acessibilidade: 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 o DataMemberAttribute a cada campo ou propriedade que você deseja serializar.

Note

Você pode aplicar o DataMemberAttribute para 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 infoset XML, que permite gravar os dados em qualquer formato reconhecido pelo XmlReader e XmlWriter. É recomendável que você use as XmlDictionaryReader classes e XmlDictionaryWriter para ler e escrever, porque ambas são otimizadas para trabalhar com o DataContractSerializer.

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

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 adicionando os tipos conhecidos à coleção. Em seguida, crie uma instância do DataContractSerializer usando uma das sobrecargas que aceitam 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, deve ser adicionada manualmente à lista de tipos conhecidos (consulte Tipos conhecidos de contrato de dados).

Compatibilidade futura

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

Construtores

Name Descrição
DataContractSerializer(Type, DataContractSerializerSettings)

Inicializa uma nova instância da DataContractSerializer classe para serializar ou desserializar um objeto do tipo e definiçõ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. Este método também especifica uma lista de tipos conhecidos que podem estar presentes no grafo objeto, o número máximo de elementos do grafo a serializar, parâmetros para ignorar dados inesperados, se deve usar construções XML não padrão para preservar os dados de referência do 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. Este método também especifica uma lista de tipos conhecidos que podem estar presentes no grafo-objeto, o número máximo de itens do grafo a serializar, parâmetros para ignorar dados inesperados, se deve usar construções XML não padrão para preservar os dados de referência do 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 objetos.

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. Este método também especifica uma lista de tipos conhecidos que podem estar presentes no grafo-objeto, o número máximo de elementos do grafo a serializar, parâmetros para ignorar dados inesperados, se deve usar construções XML não padrão para preservar os dados de referência do 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. Este método também especifica uma lista de tipos conhecidos que podem estar presentes no grafo-objeto, o número máximo de itens do grafo a serializar, parâmetros para ignorar dados inesperados, se deve usar construções XML não padrão para preservar os dados de referência do objeto no grafo, um substituto para serialização personalizada, e o elemento e espaço de nomes XML 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. Este método também especifica o elemento XML raiz e o namespace em dois parâmetros de string, bem como uma lista de tipos conhecidos que podem estar presentes no grafo de objetos.

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. Este método também especifica uma lista de tipos conhecidos que podem estar presentes no grafo objeto, o número máximo de elementos do grafo a serializar, parâmetros para ignorar dados inesperados, se deve usar construções XML não padrão para preservar os dados de referência do objeto no grafo, um substituto para serialização personalizada, parâmetros XmlDictionaryString que especificam o elemento XML e o espaço de nomes 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. Este método também especifica uma lista de tipos conhecidos que podem estar presentes no grafo objeto, o número máximo de itens do grafo a serializar, parâmetros para ignorar dados inesperados, se deve usar construtos XML não padrão para preservar dados de referência no grafo, um substituto para serialização personalizada, e parâmetros XmlDictionaryString que especificam o elemento XML e o espaço de nomes 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. Este 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 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 através 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

Name Descrição
DataContractResolver

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

DataContractSurrogate

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

IgnoreExtensionDataObject

Recebe um valor que especifica se deve ignorar dados fornecidos por uma extensão da classe quando a classe está a ser serializada ou desserializada.

KnownTypes

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

MaxItemsInObjectGraph

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

PreserveObjectReferences

Obtém um valor que especifica se deve usar construções XML não padrão para preservar os dados de referência do objeto.

SerializeReadOnlyTypes

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

Métodos

Name Descrição
Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetHashCode()

Serve como função de hash predefinida.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
IsStartObject(XmlDictionaryReader)

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

IsStartObject(XmlReader)

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

MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
ReadObject(Stream)

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

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

Lê um documento XML ou fluxo de documentos e devolve o objeto deserializado. O método inclui um parâmetro para especificar se o nome do objeto está validado, e um resolvedor para mapear xsi:type declarações em tempo de execução.

ReadObject(XmlDictionaryReader, Boolean)

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

ReadObject(XmlDictionaryReader)

Lê o documento ou fluxo XML com um XmlDictionaryReader e devolve o objeto deserializado.

(Herdado de XmlObjectSerializer)
ReadObject(XmlReader, Boolean)

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

ReadObject(XmlReader)

Lê o fluxo XML com um XmlReader e devolve o objeto deserializado.

ToString()

Devolve uma cadeia que representa o objeto atual.

(Herdado de Object)
WriteEndObject(XmlDictionaryWriter)

Escreve o elemento XML de encerramento usando um XmlDictionaryWriter.

WriteEndObject(XmlWriter)

Escreve o elemento XML de encerramento usando um XmlWriter.

WriteObject(Stream, Object)

Escreve o conteúdo completo (início, conteúdo e fim) do objeto no documento ou fluxo XML com o especificado Stream.

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

Escreve todos os dados do objeto (elemento XML inicial, conteúdo e elemento anexo) num documento ou fluxo XML usando o XmlDictionaryWriter especificado. O método inclui um resolvedor para mapear xsi:type declarações em tempo de execução.

WriteObject(XmlDictionaryWriter, Object)

Escreve o conteúdo completo (início, conteúdo e fim) do objeto no documento ou fluxo XML com o especificado XmlDictionaryWriter.

(Herdado de XmlObjectSerializer)
WriteObject(XmlWriter, Object)

Escreve todos os dados do objeto (elemento XML inicial, conteúdo e elemento de fecho) num documento ou fluxo XML com um XmlWriterelemento .

WriteObjectContent(XmlDictionaryWriter, Object)

Escreve o conteúdo XML usando um XmlDictionaryWriter.

WriteObjectContent(XmlWriter, Object)

Escreve o conteúdo XML usando um XmlWriter.

WriteStartObject(XmlDictionaryWriter, Object)

Escreve o elemento XML de abertura usando um XmlDictionaryWriterelemento .

WriteStartObject(XmlWriter, Object)

Escreve o elemento XML de abertura usando um XmlWriterelemento .

Métodos da Extensão

Name Descrição
GetSerializationSurrogateProvider(DataContractSerializer)

Devolve o fornecedor de serialização substituta para este serializador.

SetSerializationSurrogateProvider(DataContractSerializer, ISerializationSurrogateProvider)

Especifica um fornecedor de serialização substituta para isto DataContractSerializer.

Aplica-se a

Segurança de Thread

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

Ver também