Json Response
1.0.0
如何从 Asp.net (MVC) 获取 Json 响应发送到 Android 应用程序或每个需要 Json 格式的服务器数据的地方:)
大多数时候我们需要以Json格式从服务器发送数据,例如通过 API 从服务器发送数据到 Android 应用程序,我们需要 Json 格式或 XML ,但我个人大多数时候使用 Json (我认为它通常更多: ))。
对于 api 编码,我们可以使用所有服务器端语言,如 php、asp.net 等,在本文中,我的目标是Asp.net MVC
在大多数数据库中,我们都有一些相互连接的表(一对一、一对多、多对多),这意味着如果我们将数据存储在相互连接的表中,那么当获取其中的一条记录,它有一些与自身相关的记录。
首先假设我们有一个与其他表没有任何关系的表,因此如果我们想以 Json 格式获取该表的所有数据,只需执行以下操作
List users = db.Users.ToList();
return Json(users, JsonRequestBehavior.AllowGet);
现在想象用户表与其他表有关系,我们的问题正是从这里开始!为什么??因为当这一行编译时
List users = db.Users.ToList();
我们拥有用户记录的所有数据,还有与其他表中用户表的每条记录相关的所有数据!在某些情况下它很好(有时我们想要获得特殊记录和所有相关数据),而在某些情况下它太糟糕了(有时我们只想要表的独立数据而没有任何相关数据)
现在如果我们使用这种返回
return Json(users, JsonRequestBehavior.AllowGet);
然后我们遇到一个错误,表示A circular reference was detected while serializing an object of type
那么我们应该做什么呢?我们可以根据我们想要的做一些事情!
如果我们想获取基表的特殊字段,我们可以这样做
public JsonResult test()
{
return Json(
(from u in db.Users select new {
name=u.User_Name , family=u.User_Family , location=u.User_location })
, JsonRequestBehavior.AllowGet);
}
如果我们想获取基表和偶数相关表的特殊字段,那么我们可以这样做
public JsonResult test()
{
return Json(
db.Users.Select(u => new {
name = u.User_Name, family = u.User_Family, location=u.User_location
,gallery = u.Gallery.Select(g => new {
galleryName=g.Gallery_Name
,galleryDesc=g.Gallery_Desc
})
})
, JsonRequestBehavior.AllowGet);
}
或者像这样
var gallery = (from u in db.Users
join g in db.Gallery on u.User_ID equals g.Gallery_Admin
where u.User_Email == email && g.Gallery_ID == galleryId
select new
{
Gallery_Name = g.Gallery_Name,
Gallery_Desc = g.Gallery_Desc,
GalleryType = new { GalleryType_ID = g.GalleryType.GalleryType_ID , GalleryType_Title = g.GalleryType.GalleryType_Title, GalleryType_Desc = g.GalleryType.GalleryType_Desc},
Gallery_Time = g.Gallery_Time
}).FirstOrDefault();
如果您想获取基表的所有字段以及每个表中的所有相关记录,那么我们可以这样做
public ContentResult test()
{
var users = db.Users.ToList();
var list = JsonConvert.SerializeObject(users,
Formatting.None,
new JsonSerializerSettings()
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
});
return Content(list, "application/json");
}