Первоначально я задал этот вопрос: Как решить проблему «Указанный путь включения недействителен»? на который был дан ответ, и мой .Include() теперь работает, однако, когда сериализатор пытается работать по-волшебному, я получаю следующую ошибку :
You must write an attribute 'type'='object' after writing the attribute
with local name '__type'.
Вот что я делаю, чтобы вернуть данные:
var everything = dc.Categories
.Include(c => c.Products);
Мои определения классов довольно просты:
public class Category
{
public int CategoryId { get; set; }
public string Title { get; set; }
public virtual ICollection 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 Categories { get; set; }
public DbSet Products { get; set; }
}
Я также пытался удалить «виртуальный», но тогда я получаю циклические ссылки. Я попытался сделать установщик для продуктов ICollection закрытым (как предлагается здесь: http://forums.asp.net/t/1773164.aspx/1), что приводит к очистке ошибки, но затем мои продукты не являются частью возвращаемого JSON.
Что мне нужно сделать, чтобы сериализовать данные с категориями и их продуктами?
РЕДАКТИРОВАТЬ Вот трассировка стека, которую я получал:
[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