7

私は最初にこの質問をしました: 「指定されたインクルードパスが無効です」を解決するにはどうすればよいですか? これは答えられ、私の .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<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; }
}

「仮想」も削除しようとしましたが、循環参照が発生します。ICollection Products のセッターをプライベートにしてみました (ここで提案されているように: http://forums.asp.net/t/1773164.aspx/1 )。これにより、エラーがクリアされますが、私の製品はJSON を返しました。

カテゴリとその製品をシリアル化するためのデータを取得するには、どうすればよいですか?

編集 ここに私が得ていたスタックトレースがあります:

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

1 に答える 1

13

これを修正するために、次のことが必要でした。

  1. 遅延読み込みを無効にし、
  2. IgnoreDataMemberfromをナビゲーション プロパティSystem.Runtime.Serializationの属性として使用します (クラスの後方参照)。CategoryProduct

これが誰かに役立つことを願っています。

XML っぽいエラーを回避するために、ここからヘルプを使用しました: http://www.strathweb.com/2012/03/serializing-entity-framework-objects-to-json-in-asp-net-web-api/

循環参照の問題を回避するために、これをガイドとして使用しました: MVC 4、アップショット エンティティの循環参照

于 2012-04-06T13:36:54.563 に答える