Ошибка при сериализации данных EF Code First 5.0 в контроллере WebAPI
Я изначально задавал этот вопрос: Как я могу решить "Указанный недопустимый путь включения"? на который был получен ответ, и мой .Include () теперь работает, однако, когда сериализатор пытается использовать его магию, я получаю следующую ошибку:
<code>You must write an attribute 'type'='object' after writing the attribute with local name '__type'. </code>
Вот что я делаю, чтобы вернуть данные:
<code>var everything = dc.Categories .Include(c => c.Products); </code>
Мои определения классов довольно просты:
<code>public class Category { public int CategoryId { get; set; } public string Title { get; set; } public virtual ICollection<Product> Products { get; set; } } public class Product { public int ProductId { get; set; } public string Title { get; set; } public virtual Category Category { get; set; } } public class ProductDataContext : DbContext { public DbSet<Category> Categories { get; set; } public DbSet<Product> Products { get; set; } } </code>
Я также попытался удалить "виртуальный" но тогда я получаю круговые ссылки. Я попытался сделать установщик для продуктов ICollection закрытым (как предложено здесь:http://forums.asp.net/t/1773164.aspx/1), которая возвращает ошибку, но мои продукты не являются частью возвращаемого JSON.
Что мне нужно сделать, чтобы данные сериализовались с категориями и их продуктами?
EDIT Вот трассировка стека, которую я получил:
<code>[SerializationException: Object graph for type 'System.Collections.Generic.List`1[[Test.Models.Product, Test.Models, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' contains cycles and cannot be serialized if reference tracking is disabled.] System.Web.Http.WebHost.HttpControllerHandler.EndProcessRequest(IAsyncResult result) +30206 System.Web.Http.WebHost.HttpControllerHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +10 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9478661 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +178 </code>