2012-06-06 134 views
1

問題ASP .NET - JsonIgnore似乎並沒有工作

返回,因爲循環引用的JSON結果時,我不能在MVC的.Net序列化一個對象。類型檢測

自參照環......

我的實體類:

public class Subscriber 
{ 
    [JsonIgnore] 
    public virtual ICollection<Tag> Tags { get; set; } 
} 

在控制器:

public JsonResult GetSubscribers(GridRequestModel model) 
{ 
    data = ... get data .. 
    JSON(data, JsonRequestBehavior.AllowGet); 
} 

看來THA t的.NET序列化程序似乎沒有考慮到JsonIgnore,因爲我仍然得到錯誤。


嘗試性解決方案

我改變了我的控制器到以下幾點:

public JsonResult GetSubscribers(GridRequestModel model) 
{ 
    data = ... get data .. 
    JsonSerializerSettings jsSettings = new JsonSerializerSettings(); 
    jsSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; 

    string json = JsonConvert.SerializeObject(data, Formatting.None, jsSettings); 

    JSON(json, JsonRequestBehavior.AllowGet); 
} 

這一次我得到:

的RelationshipManager對象無法序列化。當RelationshipManager屬於未實現IEntityWithRelationships的 實體對象時,無法序列化此類型的 對象。

此外,不確定是否可以直接返回字符串,因爲我有返回類型的JsonResult。 Json(json ...)工作嗎?

任何幫助表示讚賞。謝謝!

回答

1

除非您在控制器中重載了Json(..)方法,否則它們將使用.NET JavaScript序列化程序而不是JSON .NET。

其次,不要直接返回EF類實例,因爲它們具有不同的依賴性以及可能的延遲加載關聯。將數據轉換爲專門設計的view/json模型類。

2

您還可以使用在System.Web.Extensions程序中發現的[ScriptIgnore]屬性

public class SomeClass:Entity 
{ 
    public SomeClass() { } 
    public virtual int TestQuestionTypeValueId { get { return this.Id; } } 
    [ScriptIgnore] 
    public virtual TestQuestionTypes TestQuestionTypes { get; set; } 
    public virtual string QuestionTypeValueText { get; set; } 
    public virtual decimal QuestionTypeValue { get; set; } 
}