下图描述了我与用户和房间之间的模型关系。
他们之间有很多关系,
我已经解决了JSON.NET的自我引用问题
并向Application_Start函数添加一些配置。 它看起来像:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
Formatting = Newtonsoft.Json.Formatting.Indented,
ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
};
}
我定义了这样的API,将数据库中的所有用户作为Json返回。
public ActionResult Index()
{
return Content(JsonConvert.SerializeObject(db.UserSet), "application/json");
}
关键是,当我得到一个JsonResult时,它看起来像是 (每个"用户"具有导航属性" Room")
[
{
"Room": [
{
"User": [
{
"Room": [],
"Id": 3,
"Name": "waterball",
"Account": "pppaass",
"Password": "123"
}
],
"Id": 1,
"Name": "sadafsa"
}
],
"Id": 2,
"Name": "waterball",
"Account": "safasfasd",
"Password": "123"
},
{
"Room": [
{
"User": [
{
"Room": [],
"Id": 2,
"Name": "waterball",
"Account": "safasfasd",
"Password": "123"
}
],
"Id": 1,
"Name": "sadafsa"
}
],
"Id": 3,
"Name": "waterball",
"Account": "pppaass",
"Password": "123"
}, ........
显然,结果看起来复杂,
如何才能获得每个会议室的 ID,姓名但没有用户属性?
或者人们处理这个问题的常见方式究竟是什么?
=============================================== ============
我已更改我的密码以达到我的要求, 但这实际上是解决这个问题的常用方法吗? 或者它有一些潜在的问题吗?
public ActionResult Index()
{
var result = from u in db.UserSet
select new
{
Id = u.Id,
Account = u.Account,
Password = u.Password,
Room = from r in u.Room
select new
{
Id = r.Id,
Name = r.Name
}
};
return Content(JsonConvert.SerializeObject(result), "application/json");
}