Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
| Vlastnictví | Hodnota |
|---|---|
| Identifikátor pravidla | CA2026 |
| Titul | Raději JsonElement.Parse než JsonDocument.Parse().RootElement |
| Kategorie | Reliability |
| Oprava je destruktivní nebo nedestruktivní | Non-breaking |
| Povoleno ve výchozím nastavení v .NET 10 | Jako návrh |
Příčina
Kód používá JsonDocument.Parse().RootElement k parsování FORMÁTU JSON do objektu JsonElement.
Popis pravidla
JsonElement.Parse je efektivnější než volání JsonDocument.Parse().RootElement. Typ JsonDocument implementuje IDisposable a pronajímá pole z ArrayPool<T>, což může vést k únikům paměti nebo zvýšenému tlaku na GC, pokud dokument správně neuzavřete. Metoda JsonElement.Parse představená v .NET 10 parsuje JSON přímo do JsonElement bez těchto obav, takže je efektivnější a méně náchylná k chybám.
Jak opravit porušení
Nahraďte volání JsonDocument.Parse().RootElement za JsonElement.Parse().
Examples
Následující fragment kódu ukazuje porušení 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
Následující fragment kódu opraví porušení zásad:
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
Kdy potlačit upozornění
Nepotlačujte upozornění z tohoto pravidla. Pokud cílíte na .NET 10 nebo novější, měli byste použít JsonElement.Parse() pro lepší výkon a správu prostředků.
Potlačte upozornění
Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.
#pragma warning disable CA2026
// The code that's violating the rule is on this line.
#pragma warning restore CA2026
Chcete-li pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost na none v konfiguračním souboru .
[*.{cs,vb}]
dotnet_diagnostic.CA2026.severity = none
Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.