Udostępnij za pośrednictwem


CA1869: Buforowanie i ponowne używanie wystąpień "JsonSerializerOptions"

Właściwości Wartość
Identyfikator reguły CA1869
Tytuł Buforowanie oraz ponowne wykorzystywanie wystąpień "JsonSerializerOptions"
Kategoria Wydajność
Poprawka łamiąca lub nienaruszająca Niezgodność
Domyślnie włączone na platformie .NET 10 Jako sugestia
Zastosowane języki C# i Visual Basic

Przyczyna

Lokale wystąpienie JsonSerializerOptions jest używane raz jako argument options wywołania Serialize lub Deserialize.

Opis reguły

Użycie lokalnej instancji JsonSerializerOptions do serializacji lub deserializacji może znacznie obniżyć wydajność aplikacji, jeśli kod jest wykonywany wiele razy, ponieważ System.Text.Json wewnętrznie keszuje metadane związane z serializacją w podanej instancji.

Jak naprawić naruszenia

Możesz użyć wzorca Singleton, aby uniknąć tworzenia nowej instancji JsonSerializerOptions za każdym razem, gdy kod jest wykonywany.

Przykład

Poniższy fragment kodu przedstawia dwa naruszenia 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 });
}

Poniższy fragment kodu naprawia naruszenia:

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);
}

Jeśli są dalsze wywołania do Serialize lub Deserialize, odpowiednio powinny być ponownie używane s_writeOptions lub s_readOptions.

Kiedy pomijać ostrzeżenia

Można bezpiecznie pominąć to ostrzeżenie, jeśli wiesz, że kod nie utworzy wystąpienia JsonSerializerOptions więcej niż raz.

Pomijanie ostrzeżenia

Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.

#pragma warning disable CA1869
// The code that's violating the rule is on this line.
#pragma warning restore CA1869

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

[*.{cs,vb}]
dotnet_diagnostic.CA1869.severity = none

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.