Originalmente había hecho esta pregunta: How Do I Resolve "A specified Include path is not valid"? que fue respondida, y mi .Include() ahora está funcionando, sin embargo, cuando el serializador intenta trabajar es mágico, obtengo el siguiente error:Error al serializar los datos del Código EF Primero 5.0 en el Controlador WebAPI
You must write an attribute 'type'='object' after writing the attribute
with local name '__type'.
Esto es lo que estoy haciendo para devolver los datos:
var everything = dc.Categories
.Include(c => c.Products);
Mis definiciones de clases son bastante sencillo:
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; }
}
También intenté eliminar 'virtual' pero luego obtuve referencias circulares. Intenté hacer que el setter en ICollection Products fuera privado (como se sugiere aquí: http://forums.asp.net/t/1773164.aspx/1), que obtiene el error para borrar, pero luego mis productos no son parte del JSON devuelto.
¿Qué debo hacer para que los datos se serialicen con las categorías y sus productos?
EDITAR Aquí fue el seguimiento de la pila que estaba recibiendo:
[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
¿Cuál es el seguimiento de la pila ? – SLaks
Agregué el rastro de pila así como también la solución a continuación, desenterré un par de otras publicaciones y las uní. – MisterJames
... y gracias de nuevo por su ayuda @SLaks. – MisterJames