2010-06-01 20 views
18

J'ai un objet dans mon projet avec des références circulaires. J'ai mis [JsonIgnore] au-dessus du champ comme ceci:Les attributs JsonIgnore ne fonctionnent pas dans ASP.NET?

[JsonIgnore] 
    public virtual Foobar ChildObject { get; set; } 

Je suis toujours à obtenir des erreurs de référence circulaire quand je sérialiser l'objet. Les seuls champs qui n'ont pas JsonIgnore sont des champs de chaîne et ne devraient pas causer cela. Y at-il autre chose que je dois faire pour que JsonIgnore fonctionne?

Merci!

+0

Ma réponse a-t-elle aidé? – JustinStolle

+0

Je viens de rentrer de vacances, je vais regarder ce soir et vous le faire savoir. Merci! –

+2

Vous pouvez également utiliser [ScriptIgnore] car [JsonIgnore] ne semble pas être implémenté. – defines

Répondre

22

Vous avez probablement une autre propriété qui renvoie à son parent. Utilisez le paramètre ReferenceLoopHandling.Ignore pour empêcher les boucles auto-référencées.

using Newtonsoft.Json; 

JsonSerializerSettings jsSettings = new JsonSerializerSettings(); 
jsSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; 

string json = JsonConvert.SerializeObject(foobars, Formatting.None, jsSettings); 
+0

J'ai cherché partout pour cela; plusieurs mentionne que Newtonsoft supporte ignorer les références circulaires et aucune mention de la propriété à définir. Merci! – defines

+0

merci Mais comment continuer à utiliser 'JSon (models," text/json ", JsonRequestBehavior.AlloGet)'? – Bellash

+2

@Bellash Je ne sais pas ce que vous demandez. – JustinStolle