CA1869 : mise en cache et réutilisation des instances de 'JsonSerializerOptions'
Propriété | Value |
---|---|
Identificateur de la règle | CA1869 |
Titre | Mettre en cache et réutiliser les instances 'JsonSerializerOptions' |
Catégorie | Performances |
Le correctif est cassant ou non cassant | Sans rupture |
Activé par défaut dans .NET 8 | Comme suggestion |
Cause
Une instance locale de JsonSerializerOptions est utilisée une fois comme argument options
d’un appel Serialize ou Deserialize.
Description de la règle
L’utilisation d’une instance locale de JsonSerializerOptions pour la sérialisation ou la désérialisation peut considérablement dégrader le niveau de performance de votre application si votre code s’exécute plusieurs fois, car System.Text.Json met en cache en interne les métadonnées liées à la sérialisation dans l’instance fournie.
Comment corriger les violations
Vous pouvez utiliser le modèle singleton pour éviter de créer une instance de JsonSerializerOptions chaque fois que votre code est exécuté.
Exemple
L’extrait de code suivant montre deux violations de CA1869 :
static string Serialize<T>(T value)
{
JsonSerializerOptions jsonOptions = new()
{
WriteIndented = true
};
return JsonSerializer.Serialize(value, jsonOptions);
}
static T Deserialize<T>(string json)
{
return JsonSerializer.Deserialize<T>(json, new JsonSerializerOptions { AllowTrailingCommas = true });
}
L’extrait de code suivant corrige les violations :
private static readonly JsonSerializerOptions s_writeOptions = new()
{
WriteIndented = true
};
private static readonly JsonSerializerOptions s_readOptions = new()
{
AllowTrailingCommas = true
};
static string Serialize<T>(T value)
{
return JsonSerializer.Serialize(value, s_writeOptions);
}
static T Deserialize<T>(string json)
{
return JsonSerializer.Deserialize<T>(json, s_readOptions);
}
S’il existe d’autres appels à Serialize
ou Deserialize
, s_writeOptions
ou s_readOptions
doivent être réutilisés, respectivement.
Quand supprimer les avertissements
Il est sécuritaire de supprimer cet avertissement si vous savez que votre code n’instancie pas une instance JsonSerializerOptions plusieurs fois.
Supprimer un avertissement
Si vous voulez supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver et réactiver la règle.
#pragma warning disable CA1869
// The code that's violating the rule is on this line.
#pragma warning restore CA1869
Pour désactiver la règle sur un fichier, un dossier ou un projet, définissez sa gravité sur none
dans le fichier de configuration.
[*.{cs,vb}]
dotnet_diagnostic.CA1869.severity = none
Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.