Udostępnij za pośrednictwem


CA2026: Preferuj JsonElement.Parse ponad JsonDocument.Parse(). Element główny

Majątek Wartość
Identyfikator reguły CA2026
Tytuł Preferuj JsonElement.Parse ponad JsonDocument.Parse().RootElement
Kategoria Niezawodność
Poprawka jest przełomowa lub nieprzełomowa Non-breaking
Domyślnie włączone na platformie .NET 10 Jako sugestia
Zastosowane języki C# i Visual Basic

Przyczyna

Kod używa JsonDocument.Parse().RootElement do przetwarzania JSON na JsonElement.

Opis reguły

JsonElement.Parse jest wydajniejszy niż wywoływanie metody JsonDocument.Parse().RootElement. Typ JsonDocument implementuje IDisposable i wynajmuje tablice z ArrayPool<T> obiektu, co może prowadzić do przecieków pamięci lub zwiększonego nacisku na GC, jeśli dokument nie zostanie prawidłowo usunięty. Metoda JsonElement.Parse, wprowadzona w .NET 10, analizuje JSON bezpośrednio do JsonElement, eliminując te problemy, co czyni jego działanie bardziej wydajnym i mniej podatnym na błędy.

Jak naprawić naruszenia

Zastąp wywołania JsonDocument.Parse().RootElement na JsonElement.Parse().

Przykłady

Poniższy fragment kodu przedstawia naruszenie ca2026:

public static void ProcessJsonViolation(string json)
{
    JsonElement element = JsonDocument.Parse(json).RootElement;
    //...
}
Public Sub ProcessJsonViolation(json As String)
    Dim element As JsonElement = JsonDocument.Parse(json).RootElement
    '...
End Sub

Poniższy fragment kodu naprawia naruszenie:

public static void ProcessJsonFixed(string json)
{
    JsonElement element = JsonElement.Parse(json);
    //...
}
Public Sub ProcessJsonFixed(json As String)
    Dim element As JsonElement = JsonElement.Parse(json)
    '...
End Sub

Kiedy pomijać ostrzeżenia

Nie pomijaj ostrzeżeń z tej reguły. Jeśli używasz platformy .NET 10 lub nowszej, użyj JsonElement.Parse() dla lepszej wydajności i zarządzania zasobami.

Pomijanie ostrzeżenia

Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.

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

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

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

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.

Zobacz także