Start Debugging
2023-09-11 Actualizado 2023-11-05 csharpdotnetdotnet-8 Edit on GitHub

.NET 8 marcar JsonSerializerOptions como readonly

Aprende a marcar instancias de JsonSerializerOptions como de solo lectura en .NET 8 usando MakeReadOnly y a comprobar la propiedad IsReadOnly.

A partir de .NET 8 puedes marcar instancias de JsonSerializerOptions como de solo lectura, impidiendo cambios posteriores en la instancia. Para congelar la instancia, basta con llamar a MakeReadOnly sobre la instancia de opciones.

Veamos un ejemplo:

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

options.MakeReadOnly();

Además, puedes comprobar si una instancia fue congelada o no consultando la propiedad IsReadOnly.

options.IsReadOnly

Intentar modificar una instancia de JsonSerializerOptions después de marcarla como readonly resultará en una 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()

Sobrecarga MakeReadOnly(bool populateMissingResolver)

Cuando se pasa populateMissingResolver como true, el método añadirá el resolver por defecto basado en reflexión a tus JsonSerializerOptions si falta. Cuidado al usar este método en aplicaciones trimmed / Native AOT, ya que arrastrará los ensamblados relacionados con la reflexión y los incluirá en tu build.

Comments

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

< Volver