.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.