Tipos suportados pelo Data Contract Serializer

O Windows Communication Foundation (WCF) usa o DataContractSerializer mecanismo de serialização 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 suporta muitos outros tipos, que podem ser pensados como tendo um contrato de dados implícito. A seguir está uma lista completa de tipos que podem ser serializados:

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

A seguir está uma lista de limitações ao usar certos 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 as DataContractSerializer permissões requires the SerializationFormatter e UnmanagedCode .

  • Ao executar o código WCF no modo de confiança parcial, a serialização e desserialização de campos (ambos public e private) não é suportadareadonly. Isso ocorre porque a IL gerada não é verificável e, portanto, requer permissões elevadas.

  • Tanto o quanto o DataContractSerializer são suportados XmlSerializer em um ambiente de confiança parcial. No entanto, a utilização do DataContractSerializer medicamento está sujeita às seguintes condições:

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

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

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

    • Os tipos conhecidos devem ser especificados no código ou na configuração no nível da máquina (Machine.config). Os 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 lançam 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 suportados pelo Data Contract Serializer:

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

  • Os tipos de valor anulável são totalmente suportados 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.

  • Ambas as estruturas e classes são suportadas.

  • O DataContractSerializer não suporta o modelo de programação usado pelos XmlSerializer e ASP.NET serviços Web. Em particular, ele não suporta 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 uma forma especial. É um tipo singleton e, após a desserialização, o desserializador respeita a restrição singleton e aponta todas as DBNull referências para a instância singleton. Por DBNull ser um tipo serializável, ele exige SerializationFormatter permissão.

Consulte também