Teilen über


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.