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 serializados.
Você pode alterar o comportamento padrão aplicando os DataContractAttribute atributos 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 tais tipos "não marcados".
Padrões de serialização
Você pode aplicar os DataContractAttribute atributos e DataMemberAttribute para controlar ou personalizar explicitamente 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. Aplicam-se as seguintes regras e exceções:
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 public
get
eset
métodos são serializados, a menos que você aplique o IgnoreDataMemberAttribute atributo a esse membro.A semântica de serialização é semelhante à do XmlSerializer.
Em tipos não marcados, somente tipos públicos com construtores que não têm parâmetros são serializados. A exceção a esta regra é ExtensionDataObject usada com a IExtensibleDataObject interface.
Campos somente leitura, propriedades sem um
get
ouset
método e propriedades com métodos internos ou particularesset
nãoget
são serializados. Tais propriedades são ignoradas e nenhuma exceção é lançada, exceto no caso de coleções get-only.XmlSerializer atributos (como
XmlElement
,XmlAttribute
,XmlIgnore
, ,XmlInclude
e assim 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 é suportada em tipos não marcados com o DataContractAttribute atributo. Isso inclui suporte para o KnownTypeAttribute atributo em tipos não marcados.
Para "excluir" 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. Esta regra é imposta principalmente para garantir a compatibilidade com versões anteriores do código escrito em versões anteriores do .NET Framework.