| 资产 | 价值 |
|---|---|
| 规则 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
有关详细信息,请参阅 如何禁止显示代码分析警告。