CA1869: 'JsonSerializerOptions' örneklerini önbelleğe alma ve yeniden kullanma

Özellik Değer
Kural Kimliği CA1869
Başlık 'JsonSerializerOptions' örneklerini önbelleğe alma ve yeniden kullanma
Kategori Performans
Hataya neden olan veya bozulmayan düzeltme Hataya neden olmayan
.NET 8'de varsayılan olarak etkin Öneri olarak

Neden

yerel örneği JsonSerializerOptions bir veya çağrısının options bağımsız değişkeni olarak bir SerializeDeserialize kez kullanılır.

Kural açıklaması

System.Text.Json serileştirmeyle ilgili meta verileri sağlanan örnekte dahili olarak önbelleğe aldığı için kodunuz birden çok kez yürütülürse, serileştirme veya seri durumdan çıkarma için yerel örneğinin JsonSerializerOptions kullanılması uygulamanızın performansını önemli ölçüde düşürebilir.

İhlalleri düzeltme

Kodunuz her yürütülürken yeni JsonSerializerOptions bir örnek oluşturmaktan kaçınmak için tekil deseni kullanabilirsiniz.

Örnek

Aşağıdaki kod parçacığı ca1869'un iki ihlalini gösterir:

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şağıdaki kod parçacığı ihlalleri düzeltir:

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

veya Deserializes_writeOptions için başka çağrılar Serialize varsa veya s_readOptions sırasıyla yeniden kullanılmalıdır.

Uyarıların ne zaman bastırılması gerekiyor?

Kodunuzun bir JsonSerializerOptions örneğini birden çok kez örneklemediğini biliyorsanız, bu uyarıyı gizlemeniz güvenlidir.

Uyarıyı gizleme

Yalnızca tek bir ihlali engellemek istiyorsanız, kuralı devre dışı bırakmak ve sonra yeniden etkinleştirmek için kaynak dosyanıza ön işlemci yönergeleri ekleyin.

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

Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, yapılandırma dosyasındaki önem derecesini noneolarak ayarlayın.

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

Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.