Udostępnij za pomocą


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

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 JsonDocument.Parse().RootElementwywołania 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