J'ai une classe de base personnalisée Entity
décorée avec [DataContract(IsReference = true)]
et dérivant de UndoableBase
de CSLA.net. Keeping IsReference est important pour conserver les données de référence d'objet.Erreur de sérialisation due à la dépendance circulaire
[Serializable]
[DataContract(IsReference = true)]
public abstract class Entity : UndoableBase
Je reçois exception à la sérialisation en utilisant ci-dessous l'extrait de code:
public void SerializeToFile(string fileName, T obj)
{
_serializer = new DataContractSerializer(typeof(T));
Serialize(fileName, obj);
}
private void Serialize(string fileName, T obj)
{
using (var fs = File.Open(fileName, FileMode.Create))
{
_serializer.WriteObject(fs, obj);
fs.Close();
}
}
System.Runtime.Serialization.InvalidDataContractException
The IsReference setting for type 'Entity' is 'True', but the same setting for its parent class 'Csla.Core.UndoableBase' is 'False'. Derived types must have the same value for IsReference as the base type. Change the setting on type 'Entity' to 'False', or on type 'Csla.Core.UndoableBase' to 'True', or do not set IsReference explicitly.
Si je supprime cette IsReference attribut tout à fait que je commence à obtenir l'erreur suivante:
Object graph for type 'XYZ' contains cycles and cannot be serialized if reference tracking is disabled.
Maintenant, mon question est de savoir comment le résoudre en changeant le IsReference
réglage pour Csla.Core.UndoableBase
lors de la sérialisation en utilisant une API.
En faisant des recherches sur ce sujet, je suis tombé sur ce post, qui parle d'utiliser DataContractSurrogate
. S'il vous plaît aidez comment l'utiliser spécifiquement si c'est utile dans ce cas ou suggérez n'importe quelle autre technique le résolvant.
How to serialize class that derives from class decorated with DataContract(IsReference=true)?
Je ne sais pas si DataContractSurrogate vous aidera ici. Qu'est-ce qui cause exactement la référence circulaire dans votre graphique: l'avez-vous identifié? Dans mon expérience, parfois la référence circulaire n'est même pas nécessaire. – CodingYoshi
Vous avez raison, mais dans mon cas la dépendance circulaire existe parce que j'ai un type où je préserve la relation parent-enfant en exposant la propriété Parent du même type. –