Исключение из циклической ссылки при сериализации классов LINQ to SQL

У меня есть набор классов linq to sql и сериализовал их в JSON с помощью.NET JavaScriptSerializer.

Однако, как только я добавляю запись в связанную таблицу, сериализация выдает "Исключение циклической ссылки". Aaarggh!

Это подробно описано здесь.

У меня есть несколько вариантов

  • Преобразовать класс linq в sql в класс без связей, избегая циклической ссылки
  • перехватить круговую ссылку с помощью обнуления ассоциаций - я не считаю это реальным вариантом
  • Используйте ScriptIgnoreAttribute (как угодно). Я не мог легко применить это, потому что свойства находятся в сгенерированных классах, а LINQ to SQL автоматически не учитывает классы друзей
  • Используйте JSON.NET и каким-то образом используйте атрибуты + классы собеседников, чтобы остановить сериализатор, пытающийся пройти через отношения.

кто-нибудь еще сталкивался с этим? Я бы действительно предпочел последний вариант, если это возможно, но я не знаю, как это сделать.

Любая помощь с благодарностью

3 ответа

Решение

Последняя версия Json.NET поддерживает сериализацию циклических отношений. Проверьте Сохранение ссылок на объекты в справке.

Дополнительная ссылка для принятого ответа

Справка Json.NET, Сохранение ссылок на объекты (с примером)

Кажется, он работает нормально с LINQ to SQL

Решение Джеймса решило часть моей проблемы. Мне нужно было исключить определенные типы списков в объекте. Чтобы решить мою проблему, я просто скопировал части нужного мне объекта. Ниже приведен пример.

var DB = new DBDataContext();
            var lUsers = new List<User>();
            DB.Users.ToList().ForEach(x => lUsers.Add(new User()
                {
                    ID = x.ID,
                    FIRST_NAME = x.FIRST_NAME
                }) );
Другие вопросы по тегам