Types sérialisables

Par défaut, DataContractSerializer sérialise tous les types accessibles publiquement. Toutes les propriétés et tous les champs publics en lecture/écriture du type sont sérialisés.

Vous pouvez modifier le comportement par défaut en appliquant les attributs DataContractAttribute et DataMemberAttribute aux types et membres. Cette fonctionnalité peut être utile dans les situations dans lesquelles vous avez des types qui ne sont pas sous votre contrôle et ne peuvent pas être modifiés pour ajouter des attributs. Le DataContractSerializer reconnaît ces types "non marqués".

Valeurs par défaut de sérialisation

Vous pouvez appliquer les attributs DataContractAttribute et DataMemberAttribute pour contrôler explicitement ou personnaliser la sérialisation de types et membres. De plus, vous pouvez appliquer ces attributs aux champs privés. Toutefois, même les types qui ne sont pas marqués avec ces attributs sont sérialisés et désérialisés. Les règles et les exceptions suivantes s'appliquent :

  • Le DataContractSerializer déduit un contrat de données à partir des types sans attributs à l'aide des propriétés par défaut des types créés récemment.

  • Tous les champs publics et les propriétés avec les méthodes get et set publiques sont sérialisées, à moins que vous n'appliquiez l'attribut IgnoreDataMemberAttribute à ce membre.

  • La sémantique de sérialisation est similaire à celle du XmlSerializer.

  • Dans les types non marqués, seuls les types publics avec les constructeurs qui n'ont pas de paramètres sont sérialisés. L'exception à cette règle est l'ExtensionDataObject utilisé avec l'interface IExtensibleDataObject.

  • Les champs en lecture seule, les propriétés sans méthode get ou set et les propriétés avec des méthodes set ou get internes ou privées ne sont pas sérialisés. Ces propriétés sont ignorées et aucune exception n'est levée, sauf dans le cas des collections get-only.

  • Les attributs XmlSerializer (tels que XmlElement, XmlAttribute, XmlIgnore, XmlInclude, etc.) sont ignorés.

  • Si vous n'appliquez pas l'attribut DataContractAttribute à un type donné, le sérialiseur ignore tout membre dans ce type auquel l'attribut DataMemberAttribute est appliqué.

  • La propriété KnownTypes est prise en charge dans les types non marqués avec l'attribut DataContractAttribute. Cela inclut la prise en charge de l'attribut KnownTypeAttribute sur les types non marqués.

  • Pour annuler le processus de sérialisation des membres publics, des propriétés ou des champs, appliquez l'attribut IgnoreDataMemberAttribute à ce membre.

Héritage

Les types non marqués (type sans attribut DataContractAttribute) peuvent hériter des types qui ont cet attribut. Toutefois, l'inverse n'est pas permis : les types avec l'attribut ne peuvent pas hériter de types non marqués. Cette règle est appliquée principalement pour garantir la compatibilité descendante avec le code écrit dans les versions antérieures de .NET Framework.

Voir aussi