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

Właściwości Wartość
Identyfikator reguły CA1869
Tytuł Buforowanie i ponowne używanie wystąpień "JsonSerializerOptions"
Kategoria Wydajność
Poprawka powodująca niezgodność lub niezgodność Niezgodność
Domyślnie włączone na platformie .NET 8 Jako sugestia

Przyczyna

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

Opis reguły

Użycie lokalnego JsonSerializerOptions wystąpienia programu do serializacji lub deserializacji może znacznie obniżyć wydajność aplikacji, jeśli kod jest wykonywany wiele razy, ponieważ plik System.Text.Json wewnętrznie buforuje metadane związane z serializacją w podanym wystąpieniu.

Jak naprawić naruszenia

Możesz użyć wzorca pojedynczego, aby uniknąć tworzenia nowego JsonSerializerOptions wystąpienia 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 istnieją dalsze wywołania metody Serialize lub Deserializes_writeOptions , lub s_readOptions powinny być ponownie używane, odpowiednio.

Kiedy pomijać ostrzeżenia

Można bezpiecznie pominąć to ostrzeżenie, jeśli wiesz, że kod nie utworzy wystąpienia wystąpienia 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.