CA2239 : Spécifiez des méthodes de désérialisation pour les champs facultatifs
Élément | Valeur |
---|---|
ID de la règle | CA2239 |
Category | Microsoft.Usage |
Modification avec rupture | Sans rupture |
Cause
Un type présente un champ marqué de l’attribut System.Runtime.Serialization.OptionalFieldAttribute et ne fournit aucune méthode de gestion des événements de désérialisation.
Description de la règle
L’attribut OptionalFieldAttribute n’a aucun effet sur la sérialisation. Un champ ainsi marqué est sérialisé. Il est toutefois ignoré lors de la désérialisation et conserve la valeur par défaut associée à son type. Les gestionnaires d’événements de désérialisation doivent être déclarés pour définir le champ pendant le processus de désérialisation.
Comment corriger les violations
Pour corriger une violation de cette règle, ajoutez au type des méthodes de gestion des événements de désérialisation.
Quand supprimer les avertissements
Il est prudent de supprimer un avertissement de cette règle si le champ doit être ignoré pendant le processus de désérialisation.
Exemple
L’exemple suivant montre un type comportant un champ facultatif et des méthodes de gestion des événements de désérialisation.
using System;
using System.Reflection;
using System.Runtime.Serialization;
[assembly: AssemblyVersionAttribute("2.0.0.0")]
namespace UsageLibrary
{
[SerializableAttribute]
public class SerializationEventHandlers
{
[OptionalFieldAttribute(VersionAdded = 2)]
int optionalField = 5;
[OnDeserializingAttribute]
void OnDeserializing(StreamingContext context)
{
optionalField = 5;
}
[OnDeserializedAttribute]
void OnDeserialized(StreamingContext context)
{
// Set optionalField if dependent on other deserialized values.
}
}
}
Règles associées
CA2236 : Appelez les méthodes de la classe de base sur les types ISerializable
CA2240 : Implémentez ISerializable comme il se doit
CA2229 : Implémentez des constructeurs de sérialisation
CA2238 : Implémentez les méthodes de sérialisation comme il se doit
CA2235 : Marquez tous les champs non sérialisés
CA2237 : Marquer les types ISerializable avec SerializableAttribute
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour