2011-02-03 53 views
0

我有asp.net mvc應用程序,其中我的模型具有類似「問題可以有多個答案」的關係。所以,當創建它的.dbml文件和類的問題類將包含EntitySet的權利?但EntitySet中的每個對象(意味着Answer對象)都將Property作爲「Question」,因此框架會自動創建循環引用和依賴關係。當我們要序列化問題列表(列表)來生成json輸出時,這對於控制器中的特定操作來說非常重要。如果我們在designer.cs文件的「Question」類中使用[ScriptIgnore]屬性作爲「Answers」屬性(由框架生成,通常人們避免打擾它並且我也是),那麼一切運行良好。這個錯誤是什麼?......有循環引用的理由......如何解決,但?

我們可以通過使用部分類來解決這個問題嗎?但我認爲部分屬性不存在於C#中。

我的問題是,這個BUG是?或一些補救措施來解決它?我的關係是:enter image description here

和錯誤是:

A circular reference was detected while serializing an object of type 'myApp.Models.Question'. 
+0

我期待這裏的描述來清除我的概念。 – 2011-02-04 05:25:43

回答

2

這是您正在使用不正確的功能。

您不應該序列化LINQ to SQL(或實體框架)類。即使Microsoft已經在這些類上放置了[DataContract]和其他屬性,它們也不應該被序列化。

相反,設計一組正確匹配你想要序列化的類。比如:這些類從數據庫類的

public class Question 
{ 
    public int ID {get;set;} 
    public string Text {get;set;} 
    public List<Answer> Answers {get;set;} 
} 

public class Answer 
{ 
    public string Text {get;set;} 
} 

填充的情況下,和序列化這些數據傳送類來代替。

順便說一句,這是數據傳輸對象模式。

0

它是一個功能:)

問題的根源在於,JSON不支持循環引用(雖然實體框架一樣)。

因此,當您使用JSON將數據傳輸到客戶端時,您需要決定要使用的層次結構。

您對[ScriptIgnore]的解決方案可能是解決問題的最佳方法。可能最好將它放在答案中的「問題」上。

+0

我和我...雖然是功能,我很高興。但json不支持它是任何開發人員都無法接受的。但是我想在客戶端使用這些問題的答案。所以它必須是序列化的,並且應該以序列化的形式得到答案列表。我知道[ScriptIgnore]是最好解決它,但它是避免序列化DESINGER.CS文件中的答案列表。我不會承擔或強迫改變,因爲它是框架創建的。 – 2011-02-04 05:17:06

1

用[DataContract(IsReference = true)]標記您的類以允許循環引用的序列化

相關問題