Fehler beim Serialisieren von EF Code First 5.0-Daten in WebAPI Controller

Ich hatte ursprünglich diese Frage gestellt:Wie löse ich "Ein angegebener Include-Pfad ist ungültig" auf? was beantwortet wurde und meine .Include () jetzt funktioniert, aber wenn der Serializer versucht, es magisch zu arbeiten, erhalte ich den folgenden Fehler:

<code>You must write an attribute 'type'='object' after writing the attribute 
with local name '__type'.
</code>

Folgendes mache ich, um die Daten zurückzugeben:

<code>var everything = dc.Categories
            .Include(c => c.Products);
</code>

Meine Klassendefinitionen sind ziemlich einfach:

<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>

Ich habe auch versucht, "virtual" zu entfernen, aber dann erhalte ich Zirkelverweise. Ich habe versucht, den Setter für ICollection-Produkte privat zu machen (wie hier vorgeschlagen:http://forums.asp.net/t/1773164.aspx/1), wodurch der Fehler behoben wird, meine Produkte jedoch nicht Teil des zurückgegebenen JSON sind.

Was muss ich tun, um die Daten mit den Kategorien und ihren Produkten zu serialisieren?

BEARBEITEN Hier war der Stack-Trace, den ich bekommen habe:

<code>[SerializationException: Object graph for type &#39;System.Collections.Generic.List`1[[Test.Models.Product, Test.Models, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]&#39; 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&amp; completedSynchronously) +178
</code>

Antworten auf die Frage(1)

Ihre Antwort auf die Frage