2015-09-30 30 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