Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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:
Todos os tipos publicamente visíveis que têm um construtor que não tem parâmetros.
Tipos de contrato de dados. Estes são tipos aos quais o DataContractAttribute atributo foi aplicado. Novos tipos personalizados que representam objetos de negócios normalmente devem ser criados como tipos de contrato de dados. Para obter mais informações, consulte Como usar contratos de dados e tipos serializáveis.
Tipos de coleção. Esses são tipos que representam listas de dados. Elas podem ser matrizes regulares de tipos ou tipos de coleção, como ArrayList e Dictionary<TKey,TValue>. O CollectionDataContractAttribute atributo pode ser usado para personalizar a serialização desses tipos, mas não é necessário. Para obter mais informações, consulte Tipos de Coleta em Contratos de Dados.
Tipos de enumeração. As enumerações, incluindo enumerações de sinalizador, são serializáveis. Opcionalmente, os tipos de enumeração podem ser marcados com o DataContractAttribute atributo, nesse caso, todos os membros que participam da serialização devem ser marcados com o EnumMemberAttribute atributo. Os membros que não estão marcados não são serializados. Para obter mais informações, consulte Tipos de Enumeração em Contratos de Dados.
Tipos primitivos do .NET Framework. Os seguintes tipos integrados ao .NET Framework podem ser serializados e são considerados tipos primitivos: Byte, SByte, Int16, Int32, Int64, UInt16, UInt32, UInt64, Single, Double, Boolean, Char, Decimal, Object e String.
Outros tipos primitivos. Esses tipos não são primitivos no .NET Framework, mas são tratados como primitivos na forma XML serializada. Esses tipos são DateTime, DateTimeOffset, , TimeSpan, Guid, Uri, XmlQualifiedNamee matrizes de Byte.
Observação
Ao contrário de outros tipos primitivos, DateTimeOffset não é um tipo conhecido por padrão. Para obter mais informações, consulte Tipos conhecidos do contrato de dados).
Tipos marcados com o SerializableAttribute atributo. Muitos tipos incluídos na biblioteca de classes base do .NET Framework se enquadram nessa categoria. O DataContractSerializer dá suporte completo a esse modelo de programação de serialização que foi usado por .NET Framework comunicação remota, o BinaryFormatter e o SoapFormatter, incluindo suporte para a interface ISerializable.
Tipos que representam XML bruto ou tipos que representam ADO.NET dados relacionais. O XmlElement e a matriz de tipos XmlNode têm suporte como uma forma de representar o XML diretamente. Além disso, há suporte para tipos que implementam a interface IXmlSerializable, incluindo o atributo relacionado XmlSchemaProviderAttribute, e os tipos XDocument e XElement. O tipo ADO.NETDataTable e o tipo DataSet (bem como suas classes derivadas tipadas) implementam a interface IXmlSerializable e, portanto, se encaixam nessa categoria. Para obter mais informações, consulte XML e tipos de ADO.NET em contratos de dados.
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
readonlycampos (ambospubliceprivate) . 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 dereadonlycampos 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. ComoDBNullé um tipo serializável, ele exige SerializationFormatter permissão.