System.Runtime.Serialization.DataContractSerializer classe
Este artigo fornece observações complementares à documentação de referência para essa API.
Use a DataContractSerializer classe 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 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 a classes e o DataContractAttribute atributo a membros de DataMemberAttribute classe para especificar propriedades e campos serializados.
Para obter uma lista de tipos que podem ser serializados, consulte Tipos suportados pelo serializador de contrato de dados.
Para usar o , primeiro crie uma instância de uma classe e um objeto apropriado para escrever ou ler o DataContractSerializerformato, 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 para um XmlDictionaryReader 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: privada, protegida, interna, interna protegida ou pública.
Por exemplo, seu esquema especifica um com uma propriedade, mas você já tem um aplicativo existente que usa um Customer
tipo nomeado Person
com uma ID
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.
Observação
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 grava DataContractSerializer 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 para ler e XmlDictionaryWriter escrever, pois 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 Retornos de chamada de serialização tolerante à versão.
Adicionar à coleção de tipos conhecidos
Ao serializar ou desserializar um objeto, é necessário que o tipo seja "conhecido" para o 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 uso de uma das sobrecargas que leva o IEnumerable<T> (por exemplo, DataContractSerializer(Type, IEnumerable<Type>)).
Observação
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 de contrato de dados).
Compatibilidade com encaminhamento
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 Contratos de dados compatíveis por encaminhamento.
Executar sob confiança parcial
Ao instanciar o objeto de destino durante a desserialização, o não chama o DataContractSerializer construtor do objeto de destino. Se você criar um tipo [DataContract] que é acessível a partir de confiança parcial (ou seja, é público e em um assembly que tem o atributo aplicado) e que executa algumas ações relacionadas à segurança, você deve estar ciente de que o AllowPartiallyTrustedCallers
construtor não é chamado. Em particular, as seguintes técnicas não funcionam:
- Se você tentar restringir o acesso de confiança parcial tornando o construtor interno ou privado, ou adicionando um
LinkDemand
ao construtor -- nenhum deles terá qualquer efeito durante a desserialização sob confiança parcial. - Se você codificar a classe que assume que o construtor foi executado, a classe pode entrar em um estado interno inválido que é explorável.