2010-12-13 56 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這不會發生subsnoic 2,我可以使它工作,如果我指定一個一個的linq查詢中的對象的屬性是否有任何線索發生了什麼,任何更多的幫助將是偉大的!如果我將Serialize頁面的值變得瘋狂並處於無限循環狀態,那麼如果我確定了錯誤,則簡單操作不起作用,忽略任何事情......有關此自我referencia循環的更多信息?

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和BIG大塊的文本解釋它......任何人都知道如何不發送這部分對象?

+0

是我的方式或寫作,不被禁止或粗魯,就像有人大聲說話時,你不會說他不說話,因爲那是他的聲音,同樣是這個,感嘆號給人一種感覺一個人的方式,而不是反過來......對不起,如果你得罪了,但你的做法是一種審查制度「是壓制言論或其他交流,可能被認爲是令人反感,有害,敏感或不方便總體「。 – freesoul 2010-12-16 00:11:05

回答

5

不知道更多關於你的對象模型很難提供明確的答案,但我會看看ReferenceLoopHandling枚舉。

您在JsonConvert上致電string SerializeObject(object value)。改用string SerializeObject(object value, Formatting formatting, JsonSerializerSettings settings)方法。 JsonSerializerSettings settings參數可以讓你設置一堆東西,包括ReferenceLoopHandling ReferenceLoopHandling { get; set; }屬性。

您可以嘗試以下值:

public enum ReferenceLoopHandling 
{ 
    Error, 
    Ignore, 
    Serialize 
} 

顯然,Error是默認的,這是你在說什麼。也許其他人會幫助。

+0

酷感謝您的答案和時間讓我檢查它... :) – freesoul 2010-12-16 00:06:00

+0

我一直在工作我無法檢查建議...:P,但我會......在接下來的日子...... – freesoul 2010-12-16 19:05:29

+0

不能正常工作我已經檢查過了......還有什麼想法會很棒:) – freesoul 2011-01-13 20:03:22