Start Debugging
2023-09-11 Обновлено 2023-11-05 csharpdotnetdotnet-8 Edit on GitHub

.NET 8 пометить JsonSerializerOptions как readonly

Узнайте, как в .NET 8 пометить экземпляры JsonSerializerOptions как только для чтения с помощью MakeReadOnly и как проверить свойство IsReadOnly.

Начиная с .NET 8 экземпляры JsonSerializerOptions можно пометить как только для чтения, запретив дальнейшие изменения. Чтобы заморозить экземпляр, достаточно вызвать MakeReadOnly у экземпляра options.

Рассмотрим пример:

var options = new JsonSerializerOptions
{
    AllowTrailingCommas = true,
    PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseUpper,
    PreferredObjectCreationHandling = JsonObjectCreationHandling.Populate,
};

options.MakeReadOnly();

Проверить, заморожен ли экземпляр, можно через свойство IsReadOnly.

options.IsReadOnly

Попытка изменить экземпляр JsonSerializerOptions после того, как он был помечен как только для чтения, приводит к InvalidOperationException:

Unhandled exception. System.InvalidOperationException: This JsonSerializerOptions instance is read-only or has already been used in serialization or deserialization.
   at System.Text.Json.ThrowHelper.ThrowInvalidOperationException_SerializerOptionsReadOnly(JsonSerializerContext context)
   at System.Text.Json.JsonSerializerOptions.VerifyMutable()

Перегрузка MakeReadOnly(bool populateMissingResolver)

Если в populateMissingResolver передать true, метод при необходимости добавит к вашему JsonSerializerOptions стандартный резолвер на основе рефлексии. Будьте осторожны при использовании этого метода в trimmed / Native AOT-приложениях: он притянет связанные с рефлексией сборки и включит их в вашу сборку.

Comments

Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.

< Назад