Bagaimana cara mendapatkan respons Json dari Asp.net (MVC) untuk dikirim ke aplikasi Android atau di mana pun yang memerlukan Format Data Server Json :)
sebagian besar waktu kita perlu mengirim data dari server dalam format Json misalnya untuk mengirim data dari server dengan Apis ke aplikasi Android sebenarnya kita memerlukan Format Json atau XML, tetapi saya pribadi lebih sering menggunakan Json (dan menurut saya itu lebih umum: ) ).
untuk pengkodean api kita dapat menggunakan semua bahasa sisi server seperti php, asp.net,... dalam artikel ini, tujuan saya adalah Asp.net MVC
di sebagian besar database kita memiliki beberapa tabel yang terhubung satu sama lain (satu-ke-satu, satu-ke-banyak, banyak-ke-banyak) artinya jika kita menyimpan data dalam tabel yang terhubung satu sama lain, maka ketika ambil satu catatan itu, ia memiliki beberapa catatan yang berhubungan dengan dirinya sendiri.
pada awalnya bayangkan kita memiliki tabel yang tidak ada hubungannya dengan tabel lain jadi jika kita ingin mendapatkan semua datanya dalam format Json, cukup lakukan seperti di bawah ini
List users = db.Users.ToList();
return Json(users, JsonRequestBehavior.AllowGet);
sekarang bayangkan tabel Pengguna memiliki hubungan dengan tabel lain, masalah kita sebenarnya dimulai dari sini !!! Mengapa?? karena ketika baris ini dikompilasi
List users = db.Users.ToList();
kami memiliki semua data catatan pengguna dan JUGA semua data yang terkait dengan setiap catatan tabel Pengguna di tabel lain !! dalam beberapa kondisi itu baik (kadang-kadang kita ingin mendapatkan catatan khusus dan semua data terkait) dan dalam beberapa kondisi itu terlalu buruk (kadang-kadang kita hanya ingin data tabel independen tanpa data terkait)
sekarang jika kita menggunakan pengembalian seperti ini
return Json(users, JsonRequestBehavior.AllowGet);
lalu kami mendapat kesalahan yang mengatakan A circular reference was detected while serializing an object of type
jadi apa yang harus kita lakukan? kita bisa melakukan beberapa hal berdasarkan APA YANG KITA INGINKAN!!
jika kita ingin mengambil bidang khusus dari tabel dasar maka kita dapat melakukan seperti di bawah ini
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);
}
jika kita ingin mengambil bidang khusus dari tabel dasar dan tabel terkait BAHKAN maka kita dapat melakukan seperti di bawah ini
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);
}
atau sth seperti ini
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();
jika Anda ingin mengambil semua bidang tabel dasar dan JUGA semua catatan terkait di setiap tabel maka kita dapat melakukan seperti di bawah ini
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");
}