CA1869: Mezipaměti a opakované použití instancí JsonSerializerOptions

Vlastnost Hodnota
ID pravidla CA1869
Název Ukládání do mezipaměti a opakované použití instancí JsonSerializerOptions
Kategorie Výkon
Oprava způsobující chybu nebo chybu způsobující chybu Nenarušující
Povoleno ve výchozím nastavení v .NET 8 Jako návrh

Příčina

Místní instance JsonSerializerOptions se používá jednou jako options argument nebo SerializeDeserialize volání.

Popis pravidla

Použití místní instance JsonSerializerOptions serializace nebo deserializace může podstatně snížit výkon vaší aplikace, pokud váš kód spustí vícekrát, protože System.Text.Json interně ukládá metadata související se serializací do zadané instance.

Jak opravit porušení

Jednoúčelový vzor můžete použít k tomu, abyste se vyhnuli vytváření nové JsonSerializerOptions instance při každém spuštění kódu.

Příklad

Následující fragment kódu ukazuje dvě porušení 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 });
}

Následující fragment kódu opravuje porušení:

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

Pokud existují další volání Serialize nebo Deserializes_writeOptions , nebo s_readOptions by měly být znovu použity, v uvedeném pořadí.

Kdy potlačit upozornění

Toto upozornění je bezpečné potlačit, pokud víte, že váš kód nebude vytvořit instanci JsonSerializerOptions více než jednou.

Potlačení upozornění

Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.

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

Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none konfiguračním souboru.

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

Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.