Share via


Tipos serializables

De forma predeterminada, DataContractSerializer serializa todos los tipos públicamente visibles. Se serializan todos los campos y propiedades de lectura y escritura públicos del tipo.

Puede cambiar el comportamiento predeterminado aplicando los atributos DataMemberAttribute y DataContractAttribute 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 DataMemberAttribute y DataContractAttribute 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 utilizando las propiedades predeterminadas de los tipos creados recientemente.
  • Se serializan todos los campos públicos y las propiedades con métodos set y get 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, sólo 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 sólo lectura, las propiedades sin un método get o set y las propiedades con métodos get o set 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 el código escrito en versiones anteriores de .NET Framework.

Consulte también

Referencia

IgnoreDataMemberAttribute
DataContractAttribute
DataMemberAttribute
XmlSerializer

Conceptos

Tipos admitidos por el serializador de contrato de datos