序列化“SubSonic.Schema .DatabaseColumn”類型的對象時檢測到循環引用。

.net c# entity-framework json subsonic

我正在嘗試做一個簡單的JSON返回,但我遇到了問題,我有以下內容。

public JsonResult GetEventData()
{
    var data = Event.Find(x => x.ID != 0);
    return Json(data);
}

我得到了一個HTTP 500,例外情況如此問題的標題所示。我也試過了

var data = Event.All().ToList()

這給了同樣的問題。

這是一個錯誤還是我的實現?

一般承認的答案

似乎您的對象層次結構中存在循環引用,JSON序列化程序不支持該引用。你需要所有的欄目嗎?您只能在視圖中選擇所需的屬性:

return Json(new 
{  
    PropertyINeed1 = data.PropertyINeed1,
    PropertyINeed2 = data.PropertyINeed2
});

這將使您的JSON對象更輕鬆,更容易理解。如果您有許多屬性, AutoMapper可用於在DTO對象和View對象之間自動映射。


專家解答

JSON與xml和其他各種格式一樣,是一種基於樹的序列化格式。如果在對像中有循環引用,它將不會愛你,因為“樹”將是:

root B => child A => parent B => child A => parent B => ...

通常有一些方法可以沿某條路徑禁用導航;例如,使用XmlSerializer您可以將父屬性標記為XmlIgnore 。我不知道這是否可能與json序列化程序有關,也不知道DatabaseColumn是否有合適的標記( 非常不可能,因為它需要引用每個序列化API)



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因