CA1869: Mezipaměť a opakované použití instance JsonSerializerOptions

Vlastnost Hodnota
ID pravidla CA1869
Název Ukládání do mezipaměti a opakované použití instancí JsonSerializerOptions
Kategorie Výkon
Oprava, která může být destruktivní nebo nedestruktivní Nezlomitelný
Povoleno ve výchozím nastavení v .NET 10 Jako návrh
Příslušné jazyky C# a Visual Basic

Příčina

Místní instance JsonSerializerOptions se používá jednou jako argument options při volání Serialize nebo Deserialize.

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í

Jednoduchý vzor singleton můžete použít k tomu, abyste se vyhnuli vytváření nové JsonSerializerOptions instance při každém spuštění vašeho 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 dojde k dalšímu volání Serialize nebo Deserialize, s_writeOptions nebo s_readOptions by měly být znovu použity v odpovídající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.