Eu tenho um banco de dados mssql para meu site dentro de 4 tabelas.
Quando eu uso isso:
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());
}
}
O código resulta no seguinte erro:
Newtonsoft.Json.JsonSerializationException: Loop de auto-referência detectado para a propriedade 'CyberUser' com o tipo 'DAL.CyberUser'. Caminho '[0] .EventRegistrations [0] .CyberUser.UserLogs [0]'.
c#
serialization
json.net
PassionateDeveloper
fonte
fonte
Respostas:
Eu simplesmente tive o mesmo problema com as coleções Pai / Filho e encontrei aquele post que resolveu meu caso. Eu só queria mostrar a lista de itens da coleção pai e não precisava de nenhum dos dados filho, portanto usei o seguinte e funcionou bem:
Erro JSON.NET Loop de auto-referência detectado para o tipo
também se refere à página codeplex Json.NET em:
http://json.codeplex.com/discussions/272371
Documentação: configuração ReferenceLoopHandling
fonte
PreserveReferencesHandling = PreserveReferencesHandling.Objects;
conforme explicado aqui: solve-self-referencing-loop-issue-when-using-newtonsoft-jsonA correção é ignorar as referências de loop e não serializá-las. Este comportamento é especificado em
JsonSerializerSettings
.Solteiro
JsonConvert
com sobrecarga:Se quiser que esse seja o comportamento padrão, adicione uma configuração global com o código
Application_Start()
em Global.asax.cs:Referência: https://github.com/JamesNK/Newtonsoft.Json/issues/78
fonte
Se estiver usando ASP.NET Core MVC, adicione isso ao método ConfigureServices do seu arquivo startup.cs:
fonte
Isso pode te ajudar.
http://code.msdn.microsoft.com/Loop-Reference-handling-in-caaffaf7
fonte
code
Public Sub New () Mybase.New ("name = EntityConName") End Subcode
. Agora, antes de End Sub, adicionecode
Me.Configuration.LazyLoadingEnabled = False Me.Configuration.ProxyCreationEnabled = Falsecode
Isso eliminará o erro 'Loop de auto-referência' em sua saída json do webapi.Você deve definir Preservando referências de objeto:
Em seguida, chame sua consulta
var q = (from a in db.Events where a.Active select a).ToList();
comoVeja: https://www.newtonsoft.com/json/help/html/PreserveObjectReferences.htm
fonte
Adicione "[JsonIgnore]" à sua classe de modelo
fonte
Estou usando o Dot.Net Core 3.1 e fiz uma pesquisa por
Estou adicionando isso a esta pergunta, pois será uma referência fácil. Você deve usar o seguinte no arquivo Startup.cs:
fonte
para asp.net core 3.1.3 isso funcionou para mim
fonte
JsonConvert.SerializeObject(ObjectName, new JsonSerializerSettings(){ PreserveReferencesHandling = PreserveReferencesHandling.Objects, Formatting = Formatting.Indented });
fonte
Às vezes você tem loops porque sua classe de tipo tem referências a outras classes e essas classes têm referências à sua classe de tipo, portanto, você deve selecionar os parâmetros que você precisa exatamente na string json, como este código.
fonte