Поделиться через


CA2026: предпочитайте JsonElement.Parse вместо JsonDocument.Parse().RootElement

Недвижимость Ценность
Идентификатор правила CA2026
Заголовок Предпочитать JsonElement.Parse больше JsonDocument.Parse().RootElement
Категория Надёжность
Исправление является разрушающим или неразрушающим Non-breaking
Включен по умолчанию в .NET 10 Как предложение

Причина

Код использует JsonDocument.Parse().RootElement для разбора JSON в JsonElement.

Описание правила

JsonElement.Parse является более эффективным, чем вызов JsonDocument.Parse().RootElement. Тип JsonDocument реализует IDisposable и арендует массивы из ArrayPool<T>, что может привести к утечкам памяти или увеличению давления GC, если вы не правильно удаляете документ. Метод JsonElement.Parse, представленный в .NET 10, анализирует 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

Дополнительные сведения см. в разделе "Подавление предупреждений анализа кода".

См. также