Bonjour à tous,

J'ai fait un model assez complet, ou toutes les classes héritent de tblTemplate.
J'ai une classe tblAffaire qui possède une propriété nommée "principale" du même type (tblAffaire).

J'utilise DataContractJsonSerializer pour sérialiser et déserialiser :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
        Dim obj As T = Activator.CreateInstance(Of T)()
        Dim ms As MemoryStream = New MemoryStream(Encoding.Unicode.GetBytes(json))
        Dim serializer As DataContractJsonSerializer = New DataContractJsonSerializer(obj.[GetType](), KnowTypes, Integer.MaxValue, False, dcs, AlwayEmitTypeInformation) ' JavaScriptSerializer Ne prend pas en charge les attributs "Name".
        obj = DirectCast(serializer.ReadObject(ms), T)
        ms.Dispose()
        Return obj
Lorsque je veux sérialiser, il me dit
Code : Sélectionner tout - Visualiser dans une fenêtre à part
"System.Runtime.Serialization.SerializationException*: 'Le graphique de l'objet pour le type 'EspBTP_D.tblAffaire' contient des cycles et il est impossible de le sérialiser si le suivi de référence est désactivé.'"
Je met donc la propriété "IsReference=True" sur l'attribut "DataContract" de ma classe "tblAffaire", comme indiqué sur la doc.

Seulement, il ne déserialise même plus car il me demande de le mettre aussi sur la classe dont il hérite : "tblTemplate". Aucun souci, je le met.

Mais du coup, il plante aussi car il me dit qu'une autre classe qui n'a rien à voir (et qui hérite aussi de "tblTemplate", comme toutes les autres) doit avoir "IsReference=False".
Je m'amuserais bien à mettre IsReference=False partout, mais ça va être long et, outre le risque d'effet de bord, je crains de mettre le doigt dans un engrenage infernal, car des fois il faudra le mettre et des fois non.

J'ai vu que pour NewtonSoft, il y avait des metaParamètres globaux , genre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
        'config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
        'config.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.None
Existe t-il la même chose pour DataContractJsonSerializer ?

Sinon, comment m'en sortir ?