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.
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:
Todos os tipos visíveis publicamente que possuem um construtor sem 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 Usando contratos de dados e tipos serializáveis.
Tipos de coleção. Estes são tipos que representam listas de dados. Estes 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. Enumerações, incluindo enumerações de sinalizador, são serializáveis. Opcionalmente, os tipos de enumeração podem ser marcados com o DataContractAttribute atributo, caso em que cada membro que participa da serialização deve ser marcado 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 incorporados no .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 no formato XML serializado. Esses tipos são DateTime, DateTimeOffset, TimeSpan, Guid, Uri, XmlQualifiedName, e 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 de 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 suporta totalmente este modelo de programação de serialização que foi usado pela comunicação remota do .NET Framework, o BinaryFormatter, e o SoapFormatter, incluindo suporte para a interface ISerializable.
Tipos que representam XML bruto ou tipos que representam ADO.NET dados relacionais. Os tipos XmlElement e a matriz de tipos XmlNode são suportados como uma maneira de representar XML diretamente. Além disso, são suportados os tipos que implementam a interface IXmlSerializable, incluindo o atributo XmlSchemaProviderAttribute relacionado, bem como os tipos XDocument e XElement. O tipo ADO.NETDataTable e o DataSet tipo (bem como suas classes derivadas tipadas) implementam a IXmlSerializable interface e, portanto, se encaixam nessa categoria. Para obter mais informações, consulte Tipos XML e ADO.NET em contratos de dados.
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, o uso de DataContractSerializer requer as permissões SerializationFormatter e UnmanagedCode.
Ao executar o código WCF no modo Confiança Parcial, a serialização e desserialização de campos (
readonlytantopublicquantoprivate) não são suportadas. Isso ocorre porque a IL gerada não é verificável e, portanto, requer permissões elevadas.Tanto o DataContractSerializer como o XmlSerializer são suportados em 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 uma[DataContract]tipo devem ser públicos e de leitura e escrita. A serialização e desserialização dereadonlycampos não é suportada ao executar WCF numa aplicação 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
DBNullreferências para a instância singleton. PorDBNullser um tipo serializável, ele exige SerializationFormatter permissão.