.NET 8 desserializar em propriedades não públicas
Aprenda a desserializar JSON em propriedades não públicas no .NET 8 usando o atributo JsonInclude e construtores parametrizados.
De forma parecida com serializar para membros não públicos, dá para desserializar para membros não públicos fornecendo um construtor com parâmetros que correspondam aos nomes dos membros não públicos e anotando esses membros com o atributo JsonInclude.
Vamos direto a um exemplo:
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; }
}
Repare que não anotamos PublicProperty de forma alguma nem a colocamos no construtor. Isso não é necessário, porque a propriedade é pública e tem um setter público, então pode ser atribuída depois que a instância do objeto é criada.
Para testar a desserialização no tipo definido acima, dá para fazer assim:
string json = "{\"PrivateProperty\":1,\"ProtectedProperty\":2,\"InternalProperty\":3,\"PublicProperty\":4}";
var myObj = JsonSerializer.Deserialize<MyClass>(json);
Lidando com múltiplos construtores na desserialização
Caso a sua classe tenha vários construtores, você precisa indicar ao desserializador qual usar com o 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.