Tengo una base de datos mssql para mi sitio web dentro de 4 tablas.
Cuando uso esto:
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());
}
}
El código da como resultado el siguiente error:
Newtonsoft.Json.JsonSerializationException: bucle de autorreferencia detectado para la propiedad 'CyberUser' con el tipo 'DAL.CyberUser'. Ruta '[0] .EventRegistrations [0] .CyberUser.UserLogs [0]'.
c#
serialization
json.net
Desarrollador apasionado
fuente
fuente
Respuestas:
Acabo de tener el mismo problema con las colecciones de padres / hijos y encontré esa publicación que resolvió mi caso. Solo quería mostrar la Lista de elementos de la colección principal y no necesitaba ninguno de los datos secundarios, por lo tanto, usé lo siguiente y funcionó bien:
Error de JSON.NET Se detectó un bucle de autorreferencia para el tipo
también hace referencia a la página del codeplex Json.NET en:
http://json.codeplex.com/discussions/272371
Documentación: Configuración ReferenceLoopHandling
fuente
PreserveReferencesHandling = PreserveReferencesHandling.Objects;
como se explica aquí: resolver-problema-de-bucle-de-referencia-automática-al-usar-newtonsoft-jsonLa solución es ignorar las referencias de bucle y no serializarlas. Este comportamiento se especifica en
JsonSerializerSettings
.Soltero
JsonConvert
con sobrecarga:Si desea que este sea el comportamiento predeterminado, agregue una Configuración global con código
Application_Start()
en Global.asax.cs:Referencia: https://github.com/JamesNK/Newtonsoft.Json/issues/78
fuente
Si usa ASP.NET Core MVC, agregue esto al método ConfigureServices de su archivo startup.cs:
fuente
Esto puede ayudarte.
http://code.msdn.microsoft.com/Loop-Reference-handling-in-caaffaf7
fuente
code
Public Sub New () Mybase.New ("nombre = EntityConName") End Subcode
. Ahora, antes de End Sub, agreguecode
Me.Configuration.LazyLoadingEnabled = False Me.Configuration.ProxyCreationEnabled = Falsecode
Eso eliminará el error de 'bucle de autorreferencia' en su salida json de webapi.Debe establecer Conservar referencias a objetos:
Luego llame a su consulta
var q = (from a in db.Events where a.Active select a).ToList();
comoVer: https://www.newtonsoft.com/json/help/html/PreserveObjectReferences.htm
fuente
Agrega "[JsonIgnore]" a tu clase de modelo
fuente
Estoy usando Dot.Net Core 3.1 e hice una búsqueda de
Estoy agregando esto a esta pregunta, ya que será una referencia fácil. Debe utilizar lo siguiente en el archivo Startup.cs:
fuente
para asp.net core 3.1.3 esto funcionó para mí
fuente
JsonConvert.SerializeObject(ObjectName, new JsonSerializerSettings(){ PreserveReferencesHandling = PreserveReferencesHandling.Objects, Formatting = Formatting.Indented });
fuente
A veces tiene bucles porque su clase de tipo tiene referencias a otras clases y esas clases tienen referencias a su clase de tipo, por lo tanto, debe seleccionar los parámetros que necesita exactamente en la cadena json, como este código.
fuente