Как я поддерживаю JSON с циклическими ссылками, используя jQuery и ASP.NET MVC? - PullRequest
3 голосов
/ 09 сентября 2010

Короче говоря, я ищу способ перемещения сложных графов объектов между кодом браузера (jQuery) и кодом сервера (ASP.NET MVC). JSON не поддерживает ссылки на объекты, поэтому стандартная сериализация объекта с циклическими ссылками невозможна из коробки.

Предлагается стандарт для ссылок на объекты JSON, который в настоящее время реализуется DoJox и (по-видимому) классом DataContractJsonSerializer .NET.

Хотя DoJo выглядит зрелой библиотекой JavaScript, я не хочу запускать DoJo параллельно с jQuery.

Кто-нибудь знает метод или плагин, который позволит мне сериализовать, десериализовать сложные графы объектов JSON с помощью jQuery?

Ответы [ 2 ]

2 голосов
/ 27 мая 2011

Хотя он не позволяет сериализовать циклические ссылки, в .NET есть атрибут [ScriptIgnore], который вы можете поместить в свои ViewModels, что предотвратит сериализацию свойств для JSON и, таким образом, предотвратит ошибку циклической ссылки, столь распространеннуюсо сложными отношениями в MVC.

Кроме того, вместо того, чтобы возвращать вашу модель как есть, поможет использование LINQ или анонимных объектов для возврата только тех свойств, которые необходимо представить в сценарии на стороне клиента.Вы снижаете производительность, сводя к минимуму объем данных, отправляемых клиенту.

0 голосов
/ 05 августа 2013

JSON.NET поддерживает циклические ссылки, сохраняя все ссылки. Он очень просто добавляет поле «$ id» к каждому объекту в строке JSON и кодирует ссылки на объекты как {"$ref"=1}, где число 1 будет соответствовать значению «id» некоторого объекта.

Итак, хотя это было решено на стороне сервера, мне все еще интересно, как воспользоваться этим на стороне клиента. Я задал этот вопрос () Существует ли библиотека JSON JavaScript (на стороне клиента), которая хорошо интегрируется с JSON.NET (на стороне сервера) и поддерживает функцию «сохранить ссылки»? ), чтобы узнать, знает ли кто-нибудь о любые библиотеки, которые его поддерживают.

Если нет, вам придется написать это самостоятельно. Это был бы довольно простой процесс с двумя проходами. Сначала десериализуйте всю строку, и при создании каждого объекта добавьте его в хэш-таблицу, используя в качестве ключа значение «$ id». Когда вы сталкиваетесь со ссылками (объект, состоящий только из свойства $ ref), вы можете добавить его в список объект + имя поля, к которому можно вернуться, чтобы заменить ссылку конечным объектом после того, как все объекты были построены.

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