Compartilhar via


Tipos serializáveis

Por padrão, o DataContractSerializer serializa todos os tipos publicamente visíveis. Todas as propriedades públicas de leitura/gravação e campos do tipo são serializadas.

Você pode alterar o comportamento padrão aplicando os atributos DataContractAttribute e DataMemberAttribute aos tipos e membros. Esse recurso pode ser útil em situações em que você tem tipos que não estão sob seu controle e não podem ser modificados para adicionar atributos. O DataContractSerializer reconhece esses tipos "não marcados".

Padrões de serialização

Você pode aplicar os DataContractAttribute atributos e DataMemberAttribute para controlar explicitamente ou personalizar a serialização de tipos e membros. Além disso, você pode aplicar esses atributos a campos privados. No entanto, mesmo os tipos que não são marcados com esses atributos são serializados e desserializados. As seguintes regras e exceções se aplicam:

  • DataContractSerializer deduz um contrato de dados dos tipos sem atributos, usando as propriedades padrão dos tipos recém-criados.

  • Todos os campos públicos e propriedades com público get e set métodos são serializados, a menos que você aplique o IgnoreDataMemberAttribute atributo a esse membro.

  • A semântica de serialização é semelhante à da XmlSerializer.

  • Em tipos não marcados, somente os tipos públicos com construtores que não têm parâmetros são serializados. A exceção a essa regra é ExtensionDataObject usada com a IExtensibleDataObject interface.

  • Campos somente leitura, propriedades sem métodos get ou set, e propriedades com métodos set ou get que são internos ou privados não são serializadas. Essas propriedades são ignoradas e nenhuma exceção é gerada, exceto no caso de coleções somente get.

  • XmlSerializer atributos (como XmlElement, , XmlAttribute, XmlIgnoree XmlIncludeassim por diante) são ignorados.

  • Se você não aplicar o DataContractAttribute atributo a um determinado tipo, o serializador ignorará qualquer membro nesse tipo ao qual o DataMemberAttribute atributo é aplicado.

  • A KnownTypes propriedade tem suporte em tipos não marcados com o DataContractAttribute atributo. Isso inclui suporte para o KnownTypeAttribute atributo em tipos não marcados.

  • Para "recusar" o processo de serialização para membros públicos, propriedades ou campos, aplique o IgnoreDataMemberAttribute atributo a esse membro.

Herança

Tipos não marcados (tipos sem o DataContractAttribute atributo) podem herdar de tipos que têm esse atributo; no entanto, o inverso não é permitido: tipos com o atributo não podem herdar de tipos não marcados. Essa regra é imposta principalmente para garantir a compatibilidade retroativa com código escrito em versões anteriores do .NET Framework.

Consulte também