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 atributos DataContractAttribute 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:
O DataContractSerializer infere um contrato de dados de tipos sem atributos usando as propriedades padrão dos tipos recém-criados.
Todos os campos públicos e propriedades com os métodos públicos
get
eset
são serializados, a menos que você aplique o atributo IgnoreDataMemberAttribute a esse membro.A semântica de serialização é semelhante à do 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 interface IExtensibleDataObject.
Campos somente leitura, propriedades sem um método
get
ouset
e propriedades com métodosset
ouget
internos ou privados não são serializados. Essas propriedades são ignoradas e nenhuma exceção é gerada, exceto no caso de coleções somente get.Atributos XmlSerializer (como
XmlElement
,XmlAttribute
,XmlIgnore
,XmlInclude
e assim por diante) são ignorados.Se você não aplicar o atributo DataContractAttribute a um determinado tipo, o serializador ignorará qualquer membro nesse tipo ao qual o atributo DataMemberAttribute se aplique.
A propriedade KnownTypes tem suporte em tipos não marcados com o atributo DataContractAttribute. Isso inclui suporte para o atributo KnownTypeAttribute em tipos não marcados.
Para "recusar" o processo de serialização para membros públicos, propriedades ou campos, aplique o atributo IgnoreDataMemberAttribute a esse membro.
Herança
Tipos não marcados (tipos sem o atributo DataContractAttribute) podem ser herdados de tipos que têm esse atributo. No entanto, o inverso não é permitido: tipos com o atributo não podem ser herdados de tipos não marcados. Essa regra é imposta principalmente para garantir a compatibilidade com versões anteriores do .NET Framework.