1
resposta

Por que a Desserialização não é necessária?

No envio do objeto nós serializamos o restauranteReadDto antes de enviar para o ItemService. Porém na chegada pela rota Post, a desserialização não foi necessária, o controlador recebe um objeto restauranteReadDto e não uma string, como eu esperava que iria acontecer. Por que isso acontece?

1 resposta

Olá, Guilherme

O que acontece é que o ASP.NET Core, o framework que você está usando, possui um recurso chamado model binding. Este recurso é responsável por pegar os dados da requisição HTTP e automaticamente tentar converter (ou desserializar, no nosso caso) esses dados para o objeto do tipo que o método do controlador está esperando.

No seu caso, o método RecebeRestauranteDoRestauranteService(RestauranteReadDto dto) do controlador está esperando um objeto do tipo RestauranteReadDto. Quando uma requisição é feita a esse método, o ASP.NET Core pega o corpo da requisição (que é uma string JSON) e tenta converter essa string para um objeto RestauranteReadDto. Se a conversão for bem-sucedida, o objeto é passado para o método do controlador. Se a conversão falhar, geralmente um erro 400 (Bad Request) é retornado.

Portanto, a desserialização é feita automaticamente pelo ASP.NET Core antes de chamar o método do controlador, e é por isso que você não precisa fazer a desserialização manualmente.

Aqui está um exemplo prático para ilustrar isso. Suponha que você tenha o seguinte JSON no corpo da requisição:

{
    "Id": 1,
    "Nome": "Restaurante A",
    "Endereco": "Rua B, 123",
    "Site": "www.restaurantea.com.br"
}

E o seguinte método no controlador:

[HttpPost]
public ActionResult RecebeRestauranteDoRestauranteService(RestauranteReadDto dto)
{
    Console.WriteLine(dto.Id);
    return Ok();
}

Quando a requisição é feita, o ASP.NET Core pega a string JSON do corpo da requisição e tenta converter para um objeto RestauranteReadDto. O resultado é um objeto RestauranteReadDto com os valores preenchidos de acordo com o JSON, e esse objeto é passado para o método do controlador.

Espero ter ajudado e bons estudos!