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 9 | Jako návrh |
Příčina
Místní instance JsonSerializerOptions se používá jednou jako options
argument nebo Serialize Deserialize 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 Deserialize
s_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.