CA1869: Zwischenspeichern und Wiederverwenden von „JsonSerializerOptions“-Instanzen
Eigenschaft | Wert |
---|---|
Regel-ID | CA1869 |
Titel | Zwischenspeichern und Wiederverwenden von „JsonSerializerOptions“-Instanzen |
Kategorie | Leistung |
Fix führt oder führt nicht zur Unterbrechung | Nicht unterbrechend |
Standardmäßig in .NET 8 aktiviert | Als Vorschlag |
Ursache
Eine lokale Instanz von JsonSerializerOptions wird einmal als options
-Argument eines Serialize- oder Deserialize-Aufrufs verwendet.
Regelbeschreibung
Die Verwendung einer lokalen Instanz von JsonSerializerOptions für die Serialisierung oder Deserialisierung kann die Leistung Ihrer Anwendung erheblich beeinträchtigen, wenn Ihr Code mehrmals ausgeführt wird, da System.Text.Json serialisierungsbezogene Metadaten intern in der bereitgestellten Instanz zwischenspeichert.
Behandeln von Verstößen
Sie können das Singleton-Muster verwenden, um zu vermeiden, dass bei jeder Ausführung Ihres Codes eine neue JsonSerializerOptions-Instanz erstellt wird.
Beispiel
Der folgende Codeausschnitt zeigt zwei Verstöße gegen 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 });
}
Der folgende Codeschnipsel korrigiert die Verletzung:
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);
}
Wenn es weitere Aufrufe an Serialize
oder Deserialize
gibt, sollten s_writeOptions
respektive s_readOptions
wiederverwendet werden.
Wann sollten Warnungen unterdrückt werden?
Diese Warnung kann sicher unterdrückt werden, wenn Sie wissen, dass Ihr Code keine JsonSerializerOptions-Instanz mehr als einmal instanziiert.
Unterdrücken einer Warnung
Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.
#pragma warning disable CA1869
// The code that's violating the rule is on this line.
#pragma warning restore CA1869
Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad in der Konfigurationsdatei auf none
fest.
[*.{cs,vb}]
dotnet_diagnostic.CA1869.severity = none
Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.