Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
| 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.