Строго введите возвращаемый JSON, используя MonoRail
-
16-09-2019 - |
Вопрос
Я вызываю следующий метод в моем контроллере, используя $.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;
}
Мой _profileSvc возвращается с дополнительными данными, которые мне не нужны (на самом деле я получаю ошибки NHibernate, потому что сеанс закрыт).
Есть ли лучший способ делать то, что я делаю?Должен ли я строго вводить возвращаемые данные или этого подхода достаточно?
Спасибо.
Решение
Я бы использовал проекцию (SetProjection()
) и SetResultTransformer()
для строгого ввода результата в DTO.
Видишь:
- 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
Другие советы
Вы уже пробовали использовать
[return: JSONReturnBinder(Properties = "ID,FieldName")]
public object ProfileFields()
{
var userfields = _profileSvc.GetFields(282);
return userfields;
}
Я надеюсь, что это поможет.
Во-первых, я бы изменил возвращаемое значение действия на IList ...
Я думаю, что ошибка закрытия сеанса может быть вызвана задержкой выполнения 'var fields'.Если вы измените свой оператор return на fields.ToList(), это приведет к принудительному выполнению лямбда-выражения, и вы, возможно, избавитесь от ошибки сеанса:
[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();
}