У меня была эта проблема, и я решил ее, добавив атрибут Newtonsoft.Json.JsonIgnoreAttore к свойству, вызывающему цикл. Очевидно, что это свойство не будет сериализовано. Чтобы решить эту проблему, у меня обычно есть и внешний ссылочный идентификатор, и иностранный класс в моих сущностях. Я понимаю, что это не интуитивно (или супер отличное ОО), но это способ, рекомендованный Джулией Лерман в ее книге «Программирование Entity Framework: Code First». Я обнаружил, что это помогает сгладить некоторые проблемы с Entity Framework.
public class SomeEntity
{
[JsonIgnore]
public ForeignEntity SomeForeignEntity {get;set;}
public Guid ForeignEntityId {get;set;}
}
Обновление: я забыл упомянуть, что мне также нужно отключить прокси на DbContext, например:
dataContext.Configuration.ProxyCreationEnabled = false;
Если вы пишете код для службы (что, вероятно, при сериализации), то это, вероятно, не проблема, но есть некоторые вещи, которые вы теряете, когда создание прокси отключено. Смотрите здесь: http://www.sellsbrothers.com/posts/Details/12665 для более подробной информации.
Я использую MS Web Api, поэтому я просто отключаю создание прокси при создании контроллера:
public class MailingApiController : ApiController
{
public MailingApiController()
{
PreventDeepSerialization();
}
private static void PreventDeepSerialization()
{
var dataContext = Injector.Get<IIntertwyneDbContext>();
dataContext.Configuration.ProxyCreationEnabled = false;
}
....