Mon dépôt a List<Student>
, List<Course>
et List<Enrolment>
où une inscription a Enrolment.Student et Enrolment.Course qui sont des références un des étudiants ou des cours dans les deux listes précédentes. Lorsque j'utilise XmlSerializer sur mon référentiel, il génère des données redondantes en sérialisant toutes les propriétés de chaque étudiant en List<Student>
puis de nouveau pour chaque référence à ces mêmes élèves en List<Enrolment>
. Je cherche une manière élégante de résoudre ceci.XmlSerializer .NET et plusieurs références au même objet
Après la désérialisation, je peux corriger les références en utilisant les valeurs d'ID dans les instances d'objet en double créées par la désérialisation, mais cela semble hackish.
Une méthode pour corriger la sortie redondante consiste à XmlIgnore Enrolment.Student et Enrolment.Course et créer deux autres propriétés pour la sérialisation - Enrolment.StudentID et Enrolment.CourseID. Toutefois, lors de la désérialisation, les références pour Enrolment.Student et Enrolment.Course ne peuvent pas être définies (AFAIK) car les résultats de la désérialisation de List<Student>
et List<Course>
ne sont pas disponibles. Une autre méthode que j'ai pensé est de sérialiser plus bas dans ma hiérarchie d'objets en faisant chacune de mes listes séparément et en contrôlant l'ordre de désérialisation - je préfère ne pas le faire.
Une autre méthode serait XmlIgnore List<Enrolment>
et créer une classe d'assistance de sérialisation d'inscription qui initialise List<Enrolment>
après la désérialisation de lui-même est terminée. Cela semble beaucoup d'effort.
Comment d'autres personnes sérialisent/désérialisent plusieurs références au même objet à l'aide de XmlSerializer?
Très rassurant - Étant nouveau à cela, j'ai supposé qu'il me manquait quelque chose. Puisque mon problème se rapporte à votre premier scénario, je suivrai votre suggestion de construire quelque chose dans la base de code pour ranger la désérialisation. Peut-être que je vais créer une IXmlFinalizeDeserialization qui peut être appelée sur tous mes objets, en suivant ceux dont la désérialisation est insuffisante et en corrigeant les références. –