2010-11-24 53 views
2

我知道圍繞這個話題有很多問題,但我真的無法看到指定一個解決方案,所以將不勝感激一些幫助。nHibernate to Json

我剛剛開始使用S#arp Architecture,並且在使用nHibernate之前(甚至沒有使用過MVC)。

我想從一個nHibernate對象返回JSON,它具有循環引用,因爲它來自關係數據庫。我用我使用LINQ to SQL它工作得很好(使用Newtonsoft的Json.NET)

return JsonConvert.SerializeObject(posts.ToArray(), Formatting.Indented, 
    new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.Objects, Converters = { new JavaScriptDateTimeConverter() } }); 

但是當我與NHibernate的嘗試反對它只是給我[{"Id":1}],而是通過調試posts調查時,在下列代碼絕對有數據(儘管只有單個項目在陣列中,但仍然) 當我嘗試使用return Json(posts);它只是抱怨循環引用。希望你能幫忙:-)

+0

對不起,混淆了Json框架 - 刪除了我的答案。 – 2010-11-25 11:59:38

回答

2

我最終解決這個問題的方法是將所有東西都放到一個數據傳輸對象中,這與我試圖轉換爲JSON的對象幾乎完全相同,但它使我能夠解決循環問題,並在其他地方給予更多的靈活性。我相信這不是最好的解決方案,但它可以正常工作,並且解決了一系列其他問題。 我只是做了這樣的事情

public object GetDTO() 
{ 
    object data = new 
    { 
     pageData = new 
     { 
      Id = Post.Id, 
      pageUrl = Post.URL, 
      title = Post.PageTitle, 
      description = Post.PageDescription, 
      user = Post.User.Name 
     } 
    }; 
    return data; 
} 

問題解決了儘管不武。

0

我建議你看一看AutoMapperValueInjector

我建議AutoMapper如果你只在創建傳出的DTO感興趣。它的配置和默認值比ValueInjector更友好。