Compartilhar via


System.Runtime.Serialization.DataContractAttribute classe

Este artigo fornece observações complementares à documentação de referência para essa API.

Aplique o DataContractAttribute atributo a tipos (classes, estruturas ou enumerações) usados em operações de serialização e desserialização pelo DataContractSerializer. Se você enviar ou receber mensagens usando a infraestrutura do Windows Communication Foundation (WCF), também deverá aplicar o DataContractAttribute a todas as classes que contêm e manipulam dados enviados em mensagens. Para obter mais informações sobre contratos de dados, confira Como usar contratos de dados.

Você também deve aplicar o DataMemberAttribute a qualquer campo, propriedade ou evento que contenha valores que você deseja serializar. Ao aplicar o , você habilita explicitamente o DataContractAttributeDataContractSerializer para serializar e desserializar os dados.

Cuidado

Você pode aplicar o DataMemberAttribute a campos privados. Lembre-se de que os dados retornados pelo campo (mesmo que sejam privados) são serializados e desserializados e, portanto, podem ser exibidos ou interceptados por um usuário ou processo mal-intencionado.

Para obter mais informações sobre contratos de dados, consulte os tópicos listados em Usando contratos de dados.

Contratos de dados

Um contrato de dados é uma descrição abstrata de um conjunto de campos com um nome e um tipo de dados para cada campo. O contrato de dados existe fora de qualquer implementação única para permitir que serviços em diferentes plataformas interoperem. Desde que os dados passados entre os serviços estejam em conformidade com o mesmo contrato, todos os serviços podem processar os dados. Esse processamento também é conhecido como um sistema fracamente acoplado. Um contrato de dados também é semelhante a uma interface, pois o contrato especifica como os dados devem ser entregues para que possam ser processados por um aplicativo. Por exemplo, o contrato de dados pode chamar um tipo de dados chamado "Pessoa" que tem dois campos de texto, chamados "Nome" e "Sobrenome". Para criar um contrato de dados, aplique o à classe e aplique o DataContractAttributeDataMemberAttribute a quaisquer campos ou propriedades que devem ser serializados. Quando serializados, os dados estão em conformidade com o contrato de dados que é incorporado implicitamente no tipo.

Observação

Um contrato de dados difere significativamente de uma interface real em seu comportamento de herança. As interfaces são herdadas por quaisquer tipos derivados. Quando você aplica o a uma classe base, os tipos derivados não herdam o atributo ou o DataContractAttribute comportamento. No entanto, se um tipo derivado tiver um contrato de dados, os membros de dados da classe base serão serializados. No entanto, você deve aplicar o DataMemberAttribute a novos membros em uma classe derivada para torná-los serializáveis.

Documentos do esquema XML e a ferramenta SvcUtil

Se você estiver trocando dados com outros serviços, deverá descrever o contrato de dados. Para a versão atual do DataContractSerializer, um esquema XML pode ser usado para definir contratos de dados. (Outras formas de metadados/descrição podem ser usadas para a mesma finalidade.) Para criar um esquema XML a partir do seu aplicativo, use a ServiceModel Metadata Utility Tool (Svcutil.exe) com a opção de linha de comando /dconly. Quando a entrada para a ferramenta é um assembly, por padrão, a ferramenta gera um conjunto de esquemas XML que definem todos os tipos de contrato de dados encontrados nesse assembly. Por outro lado, você também pode usar a ferramenta Svcutil.exe para criar definições de classe Visual Basic ou C# que estejam em conformidade com os requisitos de esquemas XML que usam construções que podem ser expressas por contratos de dados. Nesse caso, a opção de linha de comando /dconly não é necessária.

Se a entrada para a ferramenta Svcutil.exe for um esquema XML, por padrão, a ferramenta criará um conjunto de classes. Se você examinar essas classes, descobrirá que o DataContractAttribute foi aplicado. Você pode usar essas classes para criar um novo aplicativo para processar dados que devem ser trocados com outros serviços.

Você também pode executar a ferramenta em um ponto de extremidade que retorna um documento WSDL (Web Services Description Language) para gerar automaticamente o código e a configuração para criar um cliente Windows Communication Foundation (WCF). O código gerado inclui tipos marcados com o DataContractAttribute.

Reutilizar tipos existentes

Um contrato de dados tem dois requisitos básicos: um nome estável e uma lista de membros. O nome estável consiste no URI (identificador uniforme de recursos) do namespace e no nome local do contrato. Por padrão, quando você aplica o a uma classe, ele usa o nome da classe como o nome local e o namespace da classe (prefixado com "http://schemas.datacontract.org/2004/07/") como o DataContractAttribute URI do namespace. Você pode substituir os padrões definindo as Name propriedades e Namespace . Você também pode alterar o namespace aplicando o ContractNamespaceAttribute ao namespace. Use esse recurso quando você tiver um tipo existente que processa dados exatamente como você precisa, mas tem um namespace e um nome de classe diferentes do contrato de dados. Substituindo os valores padrão, você pode reutilizar seu tipo existente e fazer com que os dados serializados estejam em conformidade com o contrato de dados.

Observação

Em qualquer código, você pode usar a palavra DataContract em vez do mais longo DataContractAttribute.

Controle de versão

Um contrato de dados também pode acomodar versões posteriores de si mesmo. Ou seja, quando uma versão posterior do contrato inclui dados extras, esses dados são armazenados e retornados a um remetente intocado. Para fazer isso, implemente a IExtensibleDataObject interface.

Para obter mais informações sobre controle de versão, consulte Controle de versão de contrato de dados.