ASP.NET MVC ControllerBase.Json () не может создать допустимый JSON для коллекций NHibernate - PullRequest
0 голосов
/ 18 ноября 2009

Я использую return Json(whatever); внутри ASP.NET MVC Action, чтобы вернуть данные на мою страницу через JSON. Я использую jQuery для выполнения запроса JSON и последующего взаимодействия с DOM.

когда whatever содержит объекты NHibernate с членами коллекции (т.е. содержит ISet объекты), функция обратного вызова никогда не вызывается jQuery.

Мы используем jQuery и NHibernate - последние версии ASP.NET MVC версии 1.0.

Кто-нибудь сталкивался с этой проблемой? Как вы обошли это? (кроме не проходящих ISet)

Ответы [ 3 ]

0 голосов
/ 18 ноября 2009

Нашел проблему. Мои объекты Hibernate имели круговые ссылки. Само по себе это не является проблемой проектирования, но поскольку JSON (который представляет собой нотацию) основан на дереве, он не может обрабатывать циклические ссылки, и, следовательно, он создал исключение.

Например, JSON.net может лучше обрабатывать ссылочные циклы, хотя и не так точно, как хотелось бы.

0 голосов
/ 18 ноября 2009

Быстрый способ - проецировать данные в новый объект, пользовательский класс со свойствами, которые вы хотите сериализировать.

что-то вроде: Предполагая, что вы используете LINQ для зацикливания, вы можете использовать foreach, если нет;

        var whatever = Myclass.Select(t => new MyJSonClass{
                       p1 = t.property1,
                       p2= t.t.property2
                       });
       return Json(whatever);
0 голосов
/ 18 ноября 2009

Да, пакеты состояния, которые NHibernate поместил туда, как известно, трудно правильно сериализовать в JSON. Я хотел бы создать новый объект и присвоить ему значения вручную, включая дочерние коллекции, а затем передать новый объект методу возврата сериализатора Json, так как он не будет иметь всего содержимого пакета состояния.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...