Compartilhar via


Tipos compatíveis com o serializador de contrato de dados

O Windows Communication Foundation (WCF) usa o DataContractSerializer mecanismo de serialização como padrão para converter dados em XML e converter XML novamente em dados. O DataContractSerializer foi projetado para serializar tipos de contrato de dados . No entanto, ele dá suporte a muitos outros tipos, que podem ser considerados como tendo um contrato de dados implícito. Veja a seguir uma lista completa de tipos que podem ser serializados:

Limitações de uso de determinados tipos no modo de confiança parcial

Veja a seguir uma lista de limitações ao usar determinados tipos em cenários de modo de confiança parcial:

  • Para serializar ou desserializar um tipo que implementa ISerializable em código parcialmente confiável usando o DataContractSerializer são necessárias as permissões SerializationFormatter e UnmanagedCode.

  • Ao executar o código WCF no modo de Confiança Parcial , não há suporte para serialização e desserialização de readonly campos (ambos public e private) . Isso ocorre porque o IL gerado é inverificável e, portanto, requer permissões elevadas.

  • Tanto o DataContractSerializer quanto o XmlSerializer têm suporte em um ambiente de confiança parcial. No entanto, o uso do DataContractSerializer está sujeito às seguintes condições.

    • Todos os tipos serializáveis [DataContract] devem ser públicos.

    • Todos os campos ou propriedades serializáveis [DataMember] em um tipo [DataContract] devem ser públicos e de leitura/gravação. Não há suporte para serialização e desserialização de readonly campos ao executar o WCF em um aplicativo parcialmente confiável.

    • O modelo de programação [Serializable]/ISerializable] não é suportado em um ambiente de confiança parcial.

    • Os tipos conhecidos devem ser especificados em código ou configuração de nível de máquina (Machine.config). Tipos conhecidos não podem ser especificados na configuração no nível do aplicativo por motivos de segurança.

  • Os tipos que implementam IObjectReference geram uma exceção em um ambiente parcialmente confiável porque o GetRealObject método requer a permissão [SecurityPermission(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter)]de segurança.

Notas adicionais sobre serialização

As regras a seguir também se aplicam aos tipos compatíveis com o Serializador de Contrato de Dados:

  • Tipos genéricos são totalmente suportados pelo serializador de contrato de dados.

  • Tipos de valor anuláveis têm suporte total pelo serializador de contrato de dados.

  • Os tipos de interface são tratados como Object ou, no caso de interfaces de coleção, como tipos de coleção.

  • Há suporte para estruturas e classes.

  • O DataContractSerializer não dá suporte ao modelo de programação usado pelos XmlSerializer serviços Web e ASP.NET. Em particular, ele não dá suporte a atributos como XmlElementAttribute e XmlAttributeAttribute. Para habilitar o suporte para esse modelo de programação, o WCF deve ser alternado para usar o XmlSerializer em vez do DataContractSerializer.

  • O DBNull tipo é tratado de forma especial. É um tipo de banco de dados individual e, após a desserialização, o desserializador respeita a restrição de banco de dados individual e aponta todas as referências DBNull à instância de banco de dados individual. Como DBNull é um tipo serializável, ele exige SerializationFormatter permissão.

Consulte também