2012-02-13 6 views
4

私はお互いを参照するいくつかのBusinessObjectクラスを持っています.JsonResponseでそれをシリアル化して私のビューに戻す必要があります。私は循環参照例外を取得し続け、私はそれを取り除くことはできません。単純なデータ型プロパティではないすべてのプロパティに[ScriptIgnore()]デコレータを配置しましたが、まだ例外が発生しています。私はシリアライザをほぼすべてからブロックしているので、問題がどこにあるのか把握することはできません。それはまだ私にとって爆発的です。円参照とScriptIgnoreの問題

シリアル化されたオブジェクトの現在の状態を確認する方法はありますか?

[HttpPost] 
    public JsonResult GetAnalysisInfo(int id) 
    { 
     ProjectContext myDB = db; 
     SearchAnalysis searchanalysis = SearchAnalysis.Find(myDB, id); 
     //searchanalysis.Results = searchanalysis.SearchResultsPrototype(myDB); 
     return this.Json(searchanalysis); 
    } 

更新

私も無駄にISerializableを実装しようとしています。私のGetObjectDataは非常に簡単です:

public void GetObjectData(SerializationInfo info, StreamingContext context) 
    { 
     info.AddValue("SearchAnalysisId", this.SearchAnalysisId); 
     info.AddValue("Created", this.Created); 
    } 

まだCircularRefernceエラーが発生しています。 DateTimeデータ型は直列化の権利に問題はありませんか?

+0

私のクラスはEntity Frameworkエンティティです。いくつかの単純な永続プロパティ、マッピングされていないプロパティ、および静的メソッドとインスタンスメソッドが数多くあります。クラスの定義はここで投稿するには時間がかかりすぎます。 Jsonオブジェクトは実際にコントローラアクションのリターンラインにあり、上に投稿しました。 – CodeWarrior

+0

興味深いことに、ISerializable(および失敗)を実装しようとした後、私は[Serializable]属性デコレータを追加しました。私が特にシリアライズしているプロパティは、シリアライズされたオブジェクトに終わるものではありませんが、ISerializableを削除すると失敗します。[シリアル化可能]を削除すると失敗します。 – CodeWarrior

+0

私のエンティティが別のクラスライブラリに分割され、Webプロジェクトのコントローラからエンティティをシリアル化しようとしているのと同じ問題が発生しています – bflemi3

答えて

1

私はそのエラーを防ぐためにやっていることは、このように私のオブジェクトのプロパティを反映しanonymouseタイプを返すことです:

public JsonResult CompanyListJson() 
    { 
     var list = (from companies in appContext.Companies 
        where companies.Active.Equals(true) 
        select new 
        { 
         Name = companies.DbName, 
         Id = companies.Id, 
         Active = companies.Id.Equals(CurrentCompany.Id) 

        }); 
     return Json(list, JsonRequestBehavior.AllowGet); 
    } 

は、多分それは最善の方法はありませんが、それは薄い私のJSONを保つために私を可能に私が必要とするデータだけをプッシュします(循環参照の例外はもちろん避けてください)

サンプルを見ると、私は必要なプロパティを取って、SearchAnalysisから新しい匿名タイプを選択します。それはうまくいくはずです

+0

最初は私はそれを考えていましたが、 SearchAnalysisを使用してデータベースから取得した後にいくつかのプロパティを設定する – CodeWarrior

+0

LINQを使用して新しいanynoumousコレクションを最終ステップとして作成するのはなぜですか? – torm

+0

私は、匿名の型付きオブジェクトを返すと、インスタンスメソッドを呼び出して、マップされていないプロパティ値を取り込むことができるかどうかを尋ねる間接的な方法だったと思います。 – CodeWarrior