次の方法で共有


CA2026: JsonDocument.Parse() よりも JsonElement.Parse を優先します。RootElement

プロパティ 価値
ルール識別子 CA2026
タイトル JsonElement.ParseJsonDocument.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

詳細については、「 コード分析の警告を抑制する方法」を参照してください。

こちらも参照ください