Saya memiliki 2 entitas yang terkait sebagai satu dengan banyak
public class Restaurant {
public int RestaurantId {get;set;}
public string Name {get;set;}
public List<Reservation> Reservations {get;set;}
...
}
public class Reservation{
public int ReservationId {get;set;}
public int RestaurantId {get;set;}
public Restaurant Restaurant {get;set;}
}
Jika saya mencoba untuk mendapatkan restoran dengan pemesanan menggunakan api saya
var restaurants = await _dbContext.Restaurants
.AsNoTracking()
.AsQueryable()
.Include(m => m.Reservations).ToListAsync();
.....
Saya menerima kesalahan dalam menanggapi, karena objek berisi referensi satu sama lain. Ada tulisan terkait yang merekomendasikan untuk membuat model terpisah atau menambahkan konfigurasi NewtonsoftJson
Masalahnya adalah saya tidak ingin membuat model terpisah dan saran ke-2 tidak membantu. Apakah ada cara untuk memuat data tanpa hubungan bersepeda? *
System.Text.Json.JsonException: Siklus objek yang mungkin terdeteksi yang tidak didukung. Ini bisa disebabkan oleh siklus atau jika kedalaman objek lebih besar dari kedalaman maksimum yang diizinkan dari 32. di System.Text.Json.ThrowHelper.ThrowInvalidOperationException_SerializerCycleDetected (max32epD Intth) di System.Text.Json.JsonSerializer.Write (Penulisf8Json Penulis , Int32 originalWriterDepth, Int32 flushThreshold, JsonSerializerOptions options, WriteStack & state) di System.Text.Json.JsonSerializer. WriteResponseBodyAsync (Konteks OutputFormatterWriteContext, Encoding dipilihEncoding) di Microsoft.AspNetCore.Mvc.
*
sumber
Jawaban:
Saya telah mencoba kode Anda dalam proyek baru dan cara kedua tampaknya bekerja dengan baik setelah menginstal paket Microsoft.AspNetCore.Mvc.NewtonsoftJson pertama untuk 3.0
Coba dengan proyek baru dan bandingkan perbedaannya.
sumber
.NET Core 3.1 Instal paket Microsoft.AspNetCore.Mvc.NewtonsoftJson
Startup.cs Tambahkan layanan
sumber
Membuat pengaturan opsi serialisasi JSON saat startup agar berfungsi mungkin merupakan cara yang disukai karena Anda mungkin akan memiliki kasus serupa di masa mendatang. Sementara itu, Anda dapat mencoba menambahkan atribut data ke model Anda sehingga tidak bersambung: https://www.newtonsoft.com/json/help/html/PropertyJsonIgnore.htm
sumber
Di atas juga bekerja. Tapi saya lebih suka yang berikut ini
Karena pertama-tama kita perlu menambahkan atribut ke semua model kita mungkin memiliki referensi siklik.
sumber