Tipos serializables
De forma predeterminada, DataContractSerializer serializa todos los tipos públicamente visibles. Se serializan todas las propiedades de lectura y escritura públicas y campos del tipo.
Puede cambiar el comportamiento predeterminado aplicando los atributos DataContractAttribute y DataMemberAttribute a los tipos y miembros. Esta característica puede ser útil en situaciones en las que hay tipos que no están bajo su control y no se pueden modificar para agregar atributos. DataContractSerializer reconoce tales tipos "sin marcar".
Valores predeterminados de la serialización
Puede aplicar los atributos DataContractAttribute y DataMemberAttribute para controlar explícitamente o personalizar la serialización de tipos y miembros. Además, puede aplicar estos atributos a campos privados. Sin embargo, incluso los tipos que no se marcan con estos atributos se serializan y deserializan. Se aplican las reglas y excepciones siguientes:
DataContractSerializer deduce un contrato de datos a partir de los tipos sin atributos usando las propiedades predeterminadas de los tipos creados recientemente.
Se serializan todos los campos públicos y las propiedades con métodos
get
yset
públicos, a menos que se aplique el atributo IgnoreDataMemberAttribute a ese miembro.La semántica de la serialización es similar a la de XmlSerializer.
En los tipos no marcados, solo se serializan los tipos públicos con constructores que no tienen parámetros. La excepción a esta regla es ExtensionDataObject utilizado con la interfaz IExtensibleDataObject.
No se serializan los campos de solo lectura, las propiedades sin un método
get
oset
y las propiedades con métodosset
oget
internos o privados. Tales propiedades se omiten y no se produce ninguna excepción, salvo en el caso de las colecciones "get-only".Se omiten los atributos XmlSerializer (como
XmlElement
,XmlAttribute
,XmlIgnore
,XmlInclude
, etc.).Si no se aplica el atributo DataContractAttribute a un tipo determinado, el serializador omite cualquier miembro de ese tipo al que se aplique el atributo DataMemberAttribute.
La propiedad KnownTypes se admite en los tipos no marcados con el atributo DataContractAttribute. Esto incluye la compatibilidad con el atributo KnownTypeAttribute en los tipos no marcados.
Para descartar la serialización de miembros públicos, propiedades o campos, aplique el atributo IgnoreDataMemberAttribute a ese miembro.
Herencia
Los tipos no marcados (tipos sin el atributo DataContractAttribute) pueden heredar de los tipos que tienen este atributo; sin embargo, no es posible el caso inverso: los tipos con el atributo no pueden heredar de los tipos no marcados. Esta regla se aplica principalmente para garantizar la compatibilidad con versiones anteriores con el código escrito versiones anteriores de .NET Framework.