CIRCULAR REFERENCE SERIALIZED USING NEWTON.json

 Tópico anterior Próximo tópico Novo tópico

CIRCULAR REFERENCE SERIALIZED USING NEWTON.json

C#

 Compartilhe  Compartilhe  Compartilhe
#477531 - 31/10/2017 10:16:50

F001E
IBITINGA/SP
Cadast. em:Novembro/2004


Última edição em 31/10/2017 10:17:54 por F001E

 Anexos estao visíveis somente para usuários registrados

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.

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);
                });





#477534 - 31/10/2017 12:55:30

OCELOT
SOROCABA
Cadast. em:Março/2012


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
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.



#477543 - 01/11/2017 10:02:59

F001E
IBITINGA/SP
Cadast. em:Novembro/2004


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.

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();
        }




#477546 - 01/11/2017 10:18:11

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Como estão suas classes?

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#477548 - 01/11/2017 11:36:23

OCELOT
SOROCABA
Cadast. em:Março/2012


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




#477549 - 01/11/2017 12:10:41

F001E
IBITINGA/SP
Cadast. em:Novembro/2004


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.



#477551 - 01/11/2017 12:58:36

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Vixi.... coisa do Idyoda

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#477556 - 01/11/2017 15:16:42

F001E
IBITINGA/SP
Cadast. em:Novembro/2004


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 anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por F001E em 01/11/2017 17:25:08