| プロパティ | 価値 |
|---|---|
| ルール識別子 | CA2026 |
| タイトル |
JsonElement.ParseをJsonDocument.Parse().RootElementより優先する。 |
| カテゴリ | 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().RootElementの呼び出しをJsonElement.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
詳細については、「 コード分析の警告を抑制する方法」を参照してください。
こちらも参照ください
.NET