CIRCULAR REFERENCE SERIALIZED USING NEWTON.JSON
Bom dia a todos !
Estou com problema ao serializar um objeto, fala que referencia circular. Como resolver isso ?
Já adicionei essa configurações no Startup.cs mas não resolveu.
Estou com problema ao serializar um objeto, fala que referencia circular. Como resolver isso ?
Já adicionei essa configurações no Startup.cs mas não resolveu.
services.AddMvc()
.AddJsonOptions(options =>
{
//options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
options.SerializerSettings.Converters.Add(new StringEnumConverter());
options.SerializerSettings.Formatting = Formatting.Indented;
options.SerializerSettings.NullValueHandling = NullValueHandling.Include;
options.SerializerSettings.MissingMemberHandling = MissingMemberHandling.Ignore;
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Error;
/*options.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
options.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented;*/
})
.AddFluentValidation(fv => {
fv.ValidatorFactoryType = typeof(AttributedValidatorFactory);
});
Isso acontece porque um objeto faz referencia a outro objeto que faz referencia ao primeiro objeto, o que geraria um loop infinito ao serializar.
Se você precisa dessas referencias circulares o que pode ser feito é configurar para ignorar elas, mudando a linha
Para
Ele ainda vai serializar o objeto, mas quando ele detectar que o objeto é filho dele mesmo ele serializa só o primeiro encontrado.
Se você precisa dessas referencias circulares o que pode ser feito é configurar para ignorar elas, mudando a linha
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Error;
Para
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
Ele ainda vai serializar o objeto, mas quando ele detectar que o objeto é filho dele mesmo ele serializa só o primeiro encontrado.
Então OCELOT, o código que você mencionou já estou usando, veja minha primeira postagem. Esta tudo no Startup.cs mas mesmo assim ocorre o erro.
Agora, consegui resolver colocando esses códigos no próprio método de serialização.
Agora, consegui resolver colocando esses códigos no próprio método de serialização.
private static string SerializeJson(object obj)
{
var jsonSerializer = new JsonSerializer
{
NullValueHandling = NullValueHandling.Ignore,
MissingMemberHandling = MissingMemberHandling.Ignore,
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
};
var text = new StringBuilder();
using (var stringWriter = new StringWriter(text))
using (var textWriter = new JsonTextWriter(stringWriter))
{
jsonSerializer.Serialize(textWriter, obj);
}
return text.ToString();
}
Como estão suas classes?
Citação::
Então OCELOT, o código que você mencionou já estou usando, veja minha primeira postagem. Esta tudo no Startup.cs mas mesmo assim ocorre o erro.
Agora, consegui resolver colocando esses códigos no próprio método de serialização.
Aquelas opções são para quando o próprio ASP.Net faz a serialização, e no seu código estava comentado uma linha do jeito que falei que deveria colocar, mas em baixo tinha a mesma linha não comentada que eu falei que precisa ser modificada.
Agora do jeito que você fez não usa aquelas configurações pois você está serializando manualmente, se vai serializar manualmente então precisa mesmo passar as opções manualmente na hora de criar o JsonSerializer
Citação:Como estão suas classes?
Um rolo só. Já peguei esse projeto pronto.
Exemplo: tenho 3 classes chamada Target, Hierarchy e Account.
A classe Account tem Hierarchy.
A classe Target tem Hierarchy que por sua vez tem Account também, olha a zica ae.
Vixi.... coisa do Idyoda
Citação:Vixi.... coisa do Idyoda
E nem consigo arrumar isso, só me deram 40 horas para fazer umas melhorias. Vai ficar assim mesmo.
Tópico encerrado , respostas não são mais permitidas