CA2026: Föredrar JsonElement.Parse framför JsonDocument.Parse(). RootElement

Fastighet Värde
Regel-ID CA2026
Titel Föredra JsonElement.Parse framför JsonDocument.Parse().RootElement
Kategori Tillförlitlighet
Korrigeringen är antingen brytande eller icke-brytande Non-breaking
Aktiverad som standard i .NET 10 Som förslag

Orsak

Koden använder JsonDocument.Parse().RootElement för att parsa JSON till en JsonElement.

Regelbeskrivning

JsonElement.Parse är effektivare än att anropa JsonDocument.Parse().RootElement. Typen JsonDocument implementerar IDisposable och hyr matriser från ArrayPool<T>, vilket kan leda till minnesläckor eller ökat GC-tryck om du inte tar bort dokumentet korrekt. Metoden JsonElement.Parse , som introducerades i .NET 10, parsar JSON direkt i en JsonElement utan dessa problem, vilket gör den mer effektiv och mindre felbenägen.

Så här åtgärdar du överträdelser

Ersätt anrop till JsonDocument.Parse().RootElement med JsonElement.Parse().

Examples

Följande kodfragment visar ett brott mot 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

Följande kodfragment åtgärdar överträdelsen:

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

När du ska ignorera varningar

Ignorera inte varningar från den här regeln. Om du riktar in dig på .NET 10 eller senare bör du använda JsonElement.Parse() för bättre prestanda och resurshantering.

Undertryck en varning

Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.

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

Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none i konfigurationsfilen.

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

Mer information finns i Så här utelämnar du kodanalysvarningar.

Se även