.NET 8 deserializar en propiedades no públicas
Aprende a deserializar JSON en propiedades no públicas en .NET 8 usando el atributo JsonInclude y constructores parametrizados.
De forma similar a serializar a miembros no públicos, puedes deserializar en miembros no públicos proporcionando un constructor con parámetros que coincidan con los nombres de los miembros no públicos y anotando dichos miembros con el atributo JsonInclude.
Vayamos directamente a un ejemplo:
public class MyClass
{
public MyClass(int privateProperty, int protectedProperty, int internalProperty)
{
PrivateProperty = privateProperty;
ProtectedProperty = protectedProperty;
InternalProperty = internalProperty;
}
[JsonInclude]
private int PrivateProperty { get; }
[JsonInclude]
protected int ProtectedProperty { get; }
[JsonInclude]
internal int InternalProperty { get; }
public int PublicProperty { get; set; }
}
Fíjate en que no hemos anotado PublicProperty de ninguna forma y tampoco la hemos incluido en el constructor. No es necesario, porque la propiedad es pública y tiene un setter público, así que se puede asignar después de crear la instancia del objeto.
Para probar la deserialización en el tipo definido arriba, podemos hacer esto:
string json = "{\"PrivateProperty\":1,\"ProtectedProperty\":2,\"InternalProperty\":3,\"PublicProperty\":4}";
var myObj = JsonSerializer.Deserialize<MyClass>(json);
Manejar múltiples constructores durante la deserialización
En caso de que tu clase tenga varios constructores, tendrás que guiar al deserializador hacia el correcto usando JsonConstructorAttribute.
public MyClass() { }
[JsonConstructor]
public MyClass(int privateProperty, int protectedProperty, int internalProperty)
{
PrivateProperty = privateProperty;
ProtectedProperty = protectedProperty;
InternalProperty = internalProperty;
}
Comments
Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.