Share via


CA1869: A JsonSerializerOptions példányainak gyorsítótárazása és újrafelhasználása

Tulajdonság Érték
Szabályazonosító CA1869
Cím A "JsonSerializerOptions" példányok gyorsítótárazása és újrafelhasználása
Kategória Teljesítmény
A javítás kompatibilitástörő vagy nem törik Nem törés
Alapértelmezés szerint engedélyezve a .NET 8-ban Javaslatként

Ok

A rendszer egy helyi példányt JsonSerializerOptions használ egy vagy Deserialize több Serialize hívás argumentumakéntoptions.

Szabály leírása

A szerializáláshoz vagy deszerializáláshoz használt helyi példány JsonSerializerOptions jelentősen csökkentheti az alkalmazás teljesítményét, ha a kód többször fut, mivel a System.Text.Json belsőleg gyorsítótárazza a szerializációval kapcsolatos metaadatokat a megadott példányba.

Szabálysértések kijavítása

Az egyszeri mintával elkerülheti, hogy minden alkalommal új JsonSerializerOptions példányt hozzon létre a kód végrehajtásakor.

Példa

Az alábbi kódrészlet a CA1869 két szabálysértést mutat be:

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

A következő kódrészlet kijavítja a szabálysértéseket:

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

Ha további hívások Serialize adhatók meg, s_writeOptions vagy Deserializes_readOptions újra fel kell használni.

Mikor kell letiltani a figyelmeztetéseket?

Nyugodtan letilthatja ezt a figyelmeztetést, ha tudja, hogy a kód nem fog többször példányosítani egy JsonSerializerOptions-példányt.

Figyelmeztetés mellőzése

Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.

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

Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none a konfigurációs fájlban.

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

További információ: Kódelemzési figyelmeztetések letiltása.