Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este artigo fornece observações complementares à documentação de referência para esta API.
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.
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 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>)).
Observação
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 direta
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.
Executar sob confiança parcial
Ao instanciar o objeto de destino durante a desserialização, o DataContractSerializer não chama o 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 AllowPartiallyTrustedCallers atributo aplicado) e que executa algumas ações relacionadas à segurança, você deve estar ciente de que o construtor não é chamado. Em particular, as seguintes técnicas não funcionam:
- Se tentar restringir o acesso de confiança parcial tornando o construtor interno ou privado, ou adicionando um elemento
LinkDemandao construtor, nenhum destes terá 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.