Fortemente tipo retornado JSON usando MonoRail
-
16-09-2019 - |
Pergunta
Eu estou chamando o seguinte método no meu controlador usando $ .getJSON ()
[return: JSONReturnBinder]
public object ProfileFields()
{
var userfields = _profileSvc.GetFields(282);
var fields = from f in userfields
select new {f.ID, f.FieldName};
return fields;
}
Meu _profileSvc volta com dados extras que eu não preciso (na verdade, eu recebo erros NHibernate porque a sessão é fechada).
Existe uma maneira melhor de fazer o que estou fazendo? Devo digitar fortemente os dados Estou voltando ou é esta abordagem é suficiente?
Graças.
Solução
eu usaria uma projecção (SetProjection()
) e SetResultTransformer()
a fortemente-digite o resultado para um DTO.
Veja:
- http://www.nhforge.org/doc /nh/en/index.html#querycriteria-projection
- http://www.junasoftware.com/blog/nhibernate -setresulttransformer-and-dto.aspx
- http: / /ayende.com/Blog/archive/2007/08/30/Slicing-amp-Dicing-Queries-with-NHibernate.aspx
- http://devlicio.us/blogs/derik_whittaker/archive/2009/05/27/nhibernate-amp-setprojects-setprojects-w-list-gotcha.aspx
Outras dicas
Você já tentou usar
[return: JSONReturnBinder(Properties = "ID,FieldName")]
public object ProfileFields()
{
var userfields = _profileSvc.GetFields(282);
return userfields;
}
Espero que isso ajude.
Em primeiro lugar, gostaria de alterar o valor de retorno da ação a ser um IList ...
Eu acho que a sessão fechada erro pode resultar de uma execução atrasada de 'campos var'. Se você mudar de instrução de retorno para fields.ToList (), que irá forçar a execução da expressão lambda e você pode se livrar do erro Sessão:
[return: JSONReturnBinder]
public object ProfileFields()
{
var userfields = _profileSvc.GetFields(282);
var fields = from f in userfields
select new {f.ID, f.FieldName};
return fields.ToList();
}