Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
| Property | Value |
|---|---|
| Rule ID | CA2026 |
| Title | Prefer JsonElement.Parse over JsonDocument.Parse().RootElement |
| Category | Reliability |
| Fix is breaking or non-breaking | Non-breaking |
| Enabled by default in .NET 10 | As suggestion |
Cause
Code uses JsonDocument.Parse().RootElement to parse JSON into a JsonElement.
Rule description
JsonElement.Parse is more efficient than calling JsonDocument.Parse().RootElement. The JsonDocument type implements IDisposable and rents arrays from the ArrayPool<T>, which can lead to memory leaks or increased GC pressure if you don't properly dispose the document. The JsonElement.Parse method, introduced in .NET 10, parses JSON directly into a JsonElement without these concerns, making it more efficient and less error-prone.
How to fix violations
Replace calls to JsonDocument.Parse().RootElement with JsonElement.Parse().
Examples
The following code snippet shows a violation of 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
The following code snippet fixes the violation:
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
When to suppress warnings
Don't suppress warnings from this rule. If you're targeting .NET 10 or later, you should use JsonElement.Parse() for better performance and resource management.
Suppress a warning
If you just want to suppress a single violation, add preprocessor directives to your source file to disable and then re-enable the rule.
#pragma warning disable CA2026
// The code that's violating the rule is on this line.
#pragma warning restore CA2026
To disable the rule for a file, folder, or project, set its severity to none in the configuration file.
[*.{cs,vb}]
dotnet_diagnostic.CA2026.severity = none
For more information, see How to suppress code analysis warnings.