13

コントローラーでこのコードを試しました:

List<ProductListingModels> prom = new List<ProductListingModels>();

prom.Add(new ProductListingModels()
{
    ID = item.ID,
    Name = item.Name,
    DepartmentID = item.DepartmentID.Value,
    BrandID = item.BrandID.Value
});

jr.Data = prom;
jr.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
return Json(new
{
    ja = jr.Data,
}, JsonRequestBehavior.AllowGet);

これは私の ProductListingModel です:

 public class ProductListingModels:ItemEntityDataContext
 {
   public int ID { get; set; }
   public string Name { get; set; }
   public int DepartmentID { get; set; }
   public int BrandID { get; set; }
 }

エラーでした:

タイプのオブジェクトをシリアライズ中に循環参照が検出されました。

しかし、オブジェクト「prom」の追加から、文字列や整数などの追加に変更すると、うまく機能します。オブジェクトを追加する方法でどのような問題が発生するかわかりません。

誰でも解決策を教えてもらえますか。すべての質問と回答へようこそ、どうもありがとう。

4

1 に答える 1

20

問題は、ItemEntityDataContextスーパークラスが他のオブジェクトに保持している可能性のある参照にあると思われます。ビューに渡すために、データをviewmodelクラスにコピーすることは常に良い考えです。ただし、あなたの場合は、LINQを使用してフィールドを新しい匿名型に選択し、jsonでシリアル化します。このようなもの:

jr.Data = prom.Select(p => new 
{ 
    ID = p.ID, 
    Name = p.Name, 
    DepartmentID = p.DepartmentID,
    BrandID = p.BrandID
}).ToArray();
于 2012-05-18T19:55:22.310 に答える