2010-12-13 16 views
1

こんにちは、私はエラーを探していましたが、何か助けになるものは見つかりませんでした。問題はこれです。私はので、私はこの簡単なクエリを持って亜音速3、Newtonsoft JSONでの作業と書き込みのLINQの道されて:Subsonic 3 Newtonsoft JSON「自己参照ループ例外」

var found = from client in newclients.All() where client.Period == "sometext" select client; 

string periodoJSON = JsonConvert.SerializeObject(periodoFound); //this get "Self referencing loop Exception" 

問題は、私はこのスクリプトを実行したときに私は恐ろしい例外「自己refereningループ例外」を取得することですJsonConvertの線、亜音速では、問題なくすべてのオブジェクトを持っていますが、私は以下のことをします。

var found = from client in newclients.All() where client.Period == "sometext" select new client{client.Name, client.LastName, etc}; 

string periodoJSON = JsonConvert.SerializeObject(periodoFound); 

すべてのプロパティで問題が発生してオブジェクトがシリアル化されます。私は仕事を終わらせる必要があるので最後のやり方をしていますが、この問題の解決方法は他にありません。そうでなければ、テーブルのプロパティをすべて取得するたびにすべてのプロパティを書き込む必要があります。

は私が持っていることは、LINQには本当に基本的なクエリであると私はJsonSerializerSettingsための3つの値を試してみてください


....いずれかの解決策を見つけるためのパスに私を助けてoを私の問題を解決することを願ってや任意の仕事、もう一度私はサブソニック3と一緒に働いています。これはsubsnoic 2でも起こりません.Lineqクエリーでオブジェクトのプロパティを1つずつ指定すると、何が起こっているのかを知ることができます。より多くの助けが素晴らしいだろう!私のページをシリアライズするの価値を狂った状態にして、無限ループ状態にすると、エラーを判断するとシンプルが機能せず、何も無視されます...この自己参照ループに関するさらに詳しい情報はありますか?

var u = usuario.SingleOrDefault(x => x.TipoUsuario == "A" || x.TipoUsuario == "W"); 
JsonSerializerSettings setting = new JsonSerializerSettings(); 
setting.ReferenceLoopHandling = ReferenceLoopHandling.Error; //.Serialize .Ignore 

Page.ClientScript.RegisterClientScriptBlock(this.GetType(),"usuario", "var usuario=" + JsonConvert.SerializeObject(u, Formatting.None, setting) + ";"); 

更新------

私は、次の

string jsU = JsonConvert.SerializeObject(u,Formatting.None,new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.Objects, ReferenceLoopHandling = ReferenceLoopHandling.Ignore }); 

をコーディングし、workignですが、唯一の過ちJSONオブジェクトの列に関するすべての情報を来ることです亜音速3とテキストの大きな塊はそれを説明しています...どのようにオブジェクトのこの部分を送信しないように知っていますか?

+0

私のやり方は誰でも大声で話すときのようなもので、禁じられていないか無礼ではありません。あなたは話すことのない彼のことを彼の声です。感嘆符は感覚を与えますあなたが嫌がらせをしても、あなたがやっているやり方は、検閲の一種です」と言われているのは、不愉快で、有害で、敏感で、または不便であると思われるスピーチやその他のコミュニケーションの抑制です。一般的な身体 "です。 – freesoul

答えて

5

オブジェクトモデルについて詳しく知ることなく、決定的な答えを得るのは難しいですが、私はReferenceLoopHandling enumを見ていきます。

string SerializeObject(object value)JsonConvertに電話しています。代わりにstring SerializeObject(object value, Formatting formatting, JsonSerializerSettings settings)メソッドをお試しください。 JsonSerializerSettings settingsパラメータを使用すると、ReferenceLoopHandling ReferenceLoopHandling { get; set; }プロパティを含む一連のものを設定できます。

あなたはこれらの値を試すことができます。

public enum ReferenceLoopHandling 
{ 
    Error, 
    Ignore, 
    Serialize 
} 

もちろん、Errorがデフォルトであり、それはあなたが取得しているものです。おそらく、他の人の一人が助けになるでしょう。

+0

答えがクールであり、時間をチェックしてみましょう::) – freesoul

+0

私は働いています私は提案をチェックすることができません...:Pしかし、私は...次の日に... – freesoul

+0

は動作していません私はすでにそれをチェックしています...これ以上のアイデアは素晴らしいでしょう:) – freesoul