Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
| Недвижимость | Ценность |
|---|---|
| Идентификатор правила | 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
Дополнительные сведения см. в разделе "Подавление предупреждений анализа кода".