Saya memiliki database mssql untuk situs web saya dalam 4 tabel.
Saat saya menggunakan ini:
public static string GetAllEventsForJSON()
{
using (CyberDBDataContext db = new CyberDBDataContext())
{
return JsonConvert.SerializeObject((from a in db.Events where a.Active select a).ToList(), new JavaScriptDateTimeConverter());
}
}
Kode menghasilkan kesalahan berikut:
Newtonsoft.Json.JsonSerializationException: Loop referensi mandiri terdeteksi untuk properti 'CyberUser' dengan tipe 'DAL.CyberUser'. Path '[0] .EventRegistrations [0] .CyberUser.UserLogs [0]'.
c#
serialization
json.net
PassionateDeveloper
sumber
sumber
Jawaban:
Saya baru saja mengalami masalah yang sama dengan koleksi Parent / Child dan menemukan postingan itu yang telah menyelesaikan kasus saya. Saya Hanya ingin menampilkan Daftar item koleksi orang tua dan tidak memerlukan data anak apa pun, oleh karena itu saya menggunakan yang berikut dan berfungsi dengan baik:
Kesalahan JSON.NET Loop referensi sendiri terdeteksi untuk tipe
itu juga merujuk ke halaman codeplex Json.NET di:
http://json.codeplex.com/discussions/272371
Dokumentasi: pengaturan ReferenceLoopHandling
sumber
PreserveReferencesHandling = PreserveReferencesHandling.Objects;
seperti yang dijelaskan di sini: selesaikan-referensi-mandiri-loop-issue-when-using-newtonsoft-jsonCara mengatasinya adalah mengabaikan referensi loop dan tidak membuat serialisasi. Perilaku ini ditentukan dalam
JsonSerializerSettings
.Tunggal
JsonConvert
dengan kelebihan beban:Jika Anda ingin menjadikan ini sebagai perilaku default, tambahkan Pengaturan Global dengan kode
Application_Start()
di Global.asax.cs:Referensi: https://github.com/JamesNK/Newtonsoft.Json/issues/78
sumber
Jika menggunakan ASP.NET Core MVC, tambahkan ini ke metode ConfigureServices dari file startup.cs Anda:
sumber
Ini dapat membantu Anda.
http://code.msdn.microsoft.com/Loop-Reference-handling-in-caaffaf7
sumber
code
Sub Publik Baru () Mybase.New ("name = EntityConName") End Subcode
. Sekarang sebelum End Sub tambahkancode
Me.Configuration.LazyLoadingEnabled = False Me.Configuration.ProxyCreationEnabled = Falsecode
Itu akan menghilangkan kesalahan 'Self referencing loop' dalam output json Anda dari webapi.Anda harus menyetel Preserving Object References:
Kemudian panggil kueri Anda
var q = (from a in db.Events where a.Active select a).ToList();
sepertiLihat: https://www.newtonsoft.com/json/help/html/PreserveObjectReferences.htm
sumber
Tambahkan "[JsonIgnore]" ke kelas model Anda
sumber
Saya menggunakan Dot.Net Core 3.1 dan melakukan pencarian
Saya menambahkan ini ke pertanyaan ini, karena ini akan menjadi referensi yang mudah. Anda harus menggunakan yang berikut ini di file Startup.cs:
sumber
untuk asp.net core 3.1.3 ini berhasil untuk saya
sumber
JsonConvert.SerializeObject(ObjectName, new JsonSerializerSettings(){ PreserveReferencesHandling = PreserveReferencesHandling.Objects, Formatting = Formatting.Indented });
sumber
Kadang-kadang Anda memiliki loop karena kelas tipe Anda memiliki referensi ke kelas lain dan kelas itu memiliki referensi ke kelas tipe Anda, sehingga Anda harus memilih parameter yang Anda butuhkan persis dalam string json, seperti kode ini.
sumber