Appearance
Deserialização Polimórfica
Use [JsonPolymorphic] com [JsonDerivedType] para mapear o campo tipo à classe concreta:
csharp
[JsonPolymorphic(TypeDiscriminatorPropertyName = "tipo")]
[JsonDerivedType(typeof(EnviarTodosUsuariosComando), "ENVIAR_TODOS_USUARIOS")]
[JsonDerivedType(typeof(EnviarClientesIntervaloComando), "ENVIAR_CLIENTES_INTERVALO")]
[JsonDerivedType(typeof(EnviarTodosProdutosComando), "ENVIAR_TODOS_PRODUTOS")]
[JsonDerivedType(typeof(EnviarVendasIntervaloComando), "ENVIAR_VENDAS_INTERVALO")]
[JsonDerivedType(typeof(EnviarPreVendasIntervaloComando), "ENVIAR_PREVENDAS_INTERVALO")]
[JsonDerivedType(typeof(EnviarProdutosIntervaloComando), "ENVIAR_PRODUTOS_INTERVALO")]
[JsonDerivedType(typeof(EnviarDevolucoesIntervaloComando), "ENVIAR_DEVOLUCOES_INTERVALO")]
[JsonDerivedType(typeof(EnviarComprasIntervaloComando), "ENVIAR_COMPRAS_INTERVALO")]
[JsonDerivedType(typeof(EnviarContraprovaVendasIntervaloComando), "ENVIAR_CONTRAPROVA_VENDAS_INTERVALO")]
[JsonDerivedType(typeof(EnviarContraprovaDevolucoesIntervaloComando), "ENVIAR_CONTRAPROVA_DEVOLUCOES_INTERVALO")]
[JsonDerivedType(typeof(PararTudoComando), "PARAR_TUDO")]
public abstract class Comando
{
[JsonPropertyName("id")]
public int Id { get; set; }
[JsonPropertyName("criadoEm")]
public DateTime CriadoEm { get; set; }
}Para deserializar a lista de comandos:
csharp
var opcoes = new JsonSerializerOptions { AllowOutOfOrderMetadataProperties = true };
var comandos = JsonSerializer.Deserialize<List<Comando>>(resposta.Content, opcoes);AllowOutOfOrderMetadataProperties
Obrigatório para [JsonPolymorphic] funcionar corretamente com System.Text.Json.