Я пытаюсь найти наиболее эффективный способ отправки моих объектов Linq2Sql в мои плагины jQuery через JSON, желательно без дополнительного кода для каждого класса.
EntitySets являются основной проблемой, поскольку они вызывают не только рекурсию, но и когда игнорируется рекурсия (с помощью функции ReferenceLoopHandling JSON.NET ), когда я только на самом деле могу получить глупый объем данных нужно 1 или 2 уровня. Это очень плохо, когда вы говорите о пользователях, ролях и разрешениях, когда вы получаете роль пользователя, разрешения пользователя, разрешения роли и всех пользователей роли в вашем JSON, прежде чем он достигнет рекурсии и остановится. Сравните это с тем, что я на самом деле хочу, это просто RoleId.
Мой первоначальный подход состоял в том, чтобы отправить «упрощенную» версию объекта, где я отражаю сущность и устанавливаю для любых EntitySets значение null, но, конечно, в приведенном выше примере Roles устанавливается в значение null, и поэтому RoleId имеет значение null. Установка только свойств 2-го уровня для нулевого вида работ, но все еще слишком много данных, так как неубранные наборы EntitySet (первого уровня) повторно заполняют связанные с ними таблицы, когда JsonSerializer делает свое отражение, и я все еще получаю все те объекты Permission, которые Мне просто не нужно.
Я определенно не хочу попадать в ситуацию создания облегченной версии каждого класса и реализации для них методов стиля «От» и «Кому», так как это большая работа и кажется расточительной.
Другой вариант - добавить атрибут JsonIgnoreAttribute в соответствующие свойства, но это приведет к кошмарному сценарию всякий раз, когда классы необходимо будет заново сгенерировать.
Мое любимое решение, которое я люблю и ненавижу одновременно, - перевести классы в режим opt-in serialization, но поскольку я не могу добавить атрибуты к реальным свойствам, мне придется создавать свойства только для JSON в частичном классе. Опять же, это кажется расточительным, но я думаю, что это пока лучшее.
Любые предложения с благодарностью приняты!