Исключение из циклической ссылки при сериализации классов 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
}) );