2015-09-30 27 views
0

我正在用LINQ to SQL從我的數據庫中提取JSON。我已經設置了Serialization Mode Unidirectional(這樣我就可以序列數據),有一次我查詢我的對象(User)我將其轉換爲JSON如何強制查詢檢索嵌套元素數據?

[WebMethod] 
public User GetUserByID(int ID) 
{ 
    User user = db.User.Where(p => p.ID == ID).FirstOrDefault(); 
    var json = JsonConvert.SerializeObject(user, new IsoDateTimeConverter()); 
    return user; 
} 

的問題是,對得到的JSON,嵌套數據/對象(即我對該對象與其他對象/表的關係)爲null

因此,例如,如果我有針對該用戶3的電話號碼(1-N的關係),而不是檢索JSON陣列與這些(3)的數字,它把:

"Phones": null, 

如何能我「強制」User以查詢其中的所有數據/關係嗎?

如果我序列之前執行此查詢(例如):「類型‘用戶’檢測到自參照環」

var phones = m_oAlumno.Telefono.ToList(); 

它說

+0

http://stackoverflow.com/questions/7397207/json-net-error-self-referencing-loop-detected-for-type – Ric

+0

@Ric我認爲問題首先是LINQ不加載嵌套實體! – niksofteng

+0

該帖子有關嵌套實體的一些答案,認爲它可能是有用的 – Ric

回答

0

在LINQ to SQL中,您可以使用DataLoadOptions加載引用的實體。

var loadOptions = new DataLoadOptions(); 
loadOptions.LoadWith<User>(u => u.PhoneNumber); 
db.LoadOptions = loadOptions; 

哪裏******中國是引用用戶,並假設DB是您的LINQ數據上下文的實體。

+0

嚴,但我怎麼能「自動化」這個過程?如果我將來添加一個新表格,我想不要在代碼中手動加載新表格:O – markzzz

+0

並且無論如何,它都表示相同:'爲'User'類型檢測到自回參考循環。可以使用'PreserveReferencesHandling.Objects',但它增加了無用的字段:( – markzzz