CA2026:首选 JsonElement.Parse 而不是 JsonDocument.Parse()。RootElement

资产 价值
规则 ID CA2026
标题 比起JsonDocument.Parse().RootElement,更倾向于JsonElement.Parse
类别 Reliability
修复是中断修复还是非中断修复 Non-breaking
在 .NET 10 中默认启用 作为建议

原因

代码使用JsonDocument.Parse().RootElement将 JSON 解析为JsonElement

规则说明

JsonElement.Parse 比调用 JsonDocument.Parse().RootElement更高效。 该 JsonDocument 类型实现 IDisposable 并从 ArrayPool<T> 租用数组,如果不正确释放文档,可能会导致内存泄漏或 GC 压力增加。 在 .NET 10 中引入的 JsonElement.Parse 方法,能够将 JSON 直接解析为 JsonElement,避免了这些问题,使其更加高效且不易出错。

如何修复违规行为

将调用JsonDocument.Parse().RootElementJsonElement.Parse()替换为 .

例子

以下代码片段显示了 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

以下代码片段修复了冲突:

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

何时禁止显示警告

不要禁止显示此规则的警告。 如果要面向 .NET 10 或更高版本,应使用 JsonElement.Parse() 以获得更好的性能和资源管理。

禁止显示警告

如果只想抑制单个冲突,请将预处理器指令添加到源文件以禁用该规则,然后重新启用该规则。

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

若要禁用文件、文件夹或项目的规则,请在none中将其严重性设置为

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

有关详细信息,请参阅 如何禁止显示代码分析警告

另请参阅