/ / Circular reference wyjątek podczas serializacji LINQ do klas SQL - c #, .net, json, serialization, json.net

Circular reference wyjątek podczas serializacji LINQ do klas SQL - c #, .net, json, serialization, json.net

Mam zestaw klas linq do sql i serializowane je w JSON przy użyciu .NET JavaScriptSerializer.

Jednak zaraz po dodaniu rekordu do powiązanej tabeli, serializacja generuje "wyjątek odwołania Circular". Aaarggh!

Zostało to szczegółowo opisane tutaj.

Mam kilka opcji

  • Konwertuj klasę linq do sql na klasę bez relacji, unikając w ten sposób odwołania cyklicznego
  • wycinanie odwołania cyklicznego przez zerowanie skojarzeń - nie uważam tego za realną opcję
  • Użyj ScriptIgnoreAttribute (w jakiś sposób). Nie mogłem tego łatwo zastosować, ponieważ właściwości są w wygenerowanych klasach i LINQ do SQL nie jest automatycznie honorowane klasy znajomych
  • Użyj JSON.NET i jakoś skorzystaj z atrybutów + klas znajomych, aby zatrzymać serializator próbujący przejść przez relacje.

Czy ktoś inny to napotkał? Naprawdę wolałbym ostatnią opcję, jeśli to możliwe, ale nie wiem, jak to zrobić.

Każda pomoc jest bardzo doceniana

Odpowiedzi:

8 dla odpowiedzi № 1

Najnowsza wersja Json.NET obsługuje szeregowanie relacji cyklicznych. Sprawdzić Zachowywanie odniesień do obiektów w pomocy.


4 dla odpowiedzi nr 2

Dodatkowy link do zaakceptowanej odpowiedzi

Pomoc Json.NET, Zachowywanie odniesień do obiektów (z przykładem)

Wydaje się, że działa dobrze z LINQ do SQL


1 dla odpowiedzi nr 3

Rozwiązanie Jamesa rozwiązało część mojego problemu. Musiałem wykluczyć niektóre typy list wewnątrz obiektu. Aby rozwiązać mój problem, właśnie skopiowałem części obiektu, których potrzebowałem. Oto przykład.

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
}) );