Dapper, retorno de objetos dinamicos [RESOLVIDO]

Preciso de algo genérico pra retornar objetos dinâmicos:

Ate fiz este método ai no repositório>, mas, no controller me devolve este erro:

Alguma sugestão?

1 curtida

Como assim?

1 curtida

O meu objeto :

image

se você observar o meu SQL:

select id, name from calltype ...

Eu não preciso enviar todos os campos no JSON e terei métodos específicos pra isso.

Em resumo :

Quero criar varias SQL e retornar os atributos “como objetos” dinâmicos

id, name ou
id, name, createdBy ou
id, UpdatedByUserId

Vai depender do momento, pois eu não quero enviar tudo sempre

Id, 
Name ,
CreatedDate ,
CreatedByUserId ,
MachineNameOrIPCreate ,
UpdatedDate ,
UpdatedByUserId ,
MachineNameOrIPUpdate ,
DeletedDate ,
DeletedByUserId ,
MachineNameOrIPDelete ,
CompanyId ,
BranchOfficeId ,

Percebe?

O meu JSON esta indo dados demais pois são desnecessários para o momento

1 curtida

Ideal é sempre trabalhar com Dto específico, não misturando responsabilidades com uma classe genérica que pode impactar n funcionalidades.

Alternativas seriam voce ignorar a propriedade do json com o atributo [JsonIgnore] ou usar tipos anônimos, que é uma solucao mais dinâmica. Pesquise sobre. Exemplo qualquer:

var resultado = lista.Select(l => new { l.Codigo, l.Nome });

Bom vamos lá, a sua imagem diz tudo:

Você está retornado um dado dinâmico, e quer selecionar alguns campos do seu banco, isso é muito bom porque resultado num desempenho daquilo do que realmente precisa, para converte em um tipo para que o JSON se comporte:

[
    {"id": 1, "name": "Manutenção"}, ...
]

precisa fazer mais uma instrução da seguinte forma, na variável result faça um expressão assim:

var resultType = result
    .Select(x => new
       {
            x.Id,
            x.Name
        })
     .ToList();

que você terá já um dado tipado do que precisa.

Vale muito bom lembrar que essa classe DapperRow nada mais é do que uma implementação:

  • IDictionary<string, object>
  • IReadOnlyDictionary<string, object>

ou seja, o retorno é dinâmico que na verdade é um dicionário de dados.

1 curtida

@Dragoon, Bom dia !
Exatamente isso, funcionou !!!
Eu não estava enxergando , da forma que você comentou.
Mas agora esta ok, meu JSON sera como eu quero… VLW