Mein Repository hat List<Student>
, List<Course>
und List<Enrolment>
wo eine Anmeldung Enrolment.Student und Enrolment.Course, die Referenzen eines der Studenten oder Kurse in den beiden vorherigen Listen sind..NET XmlSerializer und mehrere Referenzen auf das gleiche Objekt
Wenn ich XmlSerializer auf meinem Repository verwende, gibt es redundante Daten aus, da es alle Eigenschaften jedes Schülers in List<Student>
serialisiert, dann wieder für jede Referenz auf dieselben Studenten in List<Enrolment>
. Ich suche nach einem eleganten Weg, um das zu lösen.
Nach der Deserialisierung kann ich die Referenzen mit den ID-Werten in den doppelten Objekt-Instanzen, die durch die Deserialisierung erstellt wurden, beheben, aber das scheint hackish.
Eine Methode, um die redundante Ausgabe zu beheben, besteht darin, XmlIgnore Enrolment.Student und Enrolment.Course zu erstellen und zwei weitere Eigenschaften für die Serialisierung zu erstellen - Enrolment.StudentID und Enrolment.CourseID. Während der Deserialisierung können die Referenzen für Enrolment.Student und Enrolment.Course jedoch nicht festgelegt werden (AFAIK), da die Ergebnisse der Deserialisierung von List<Student>
und List<Course>
nicht verfügbar sind.
Eine andere Methode, an die ich gedacht habe, ist, tiefer in meiner Objekthierarchie zu serialisieren, indem ich jede meiner Listen einzeln mache und die Reihenfolge der Deserialisierung kontrolliere - das tue ich eher nicht.
Eine andere Methode wäre, XmlIgnore List<Enrolment>
und erstellen Sie eine Registrierung Serialisierung Helper-Klasse, die List<Enrolment>
initialisiert, nachdem die Deserialisierung von sich abgeschlossen ist. Das scheint eine große Anstrengung zu sein.
Wie serialisieren/deserialisieren andere Personen mehrere Verweise auf dasselbe Objekt mit XmlSerializer?
Sehr beruhigend - Da ich neu dabei bin, habe ich angenommen, dass ich etwas verpassen muss. Da sich mein Problem auf Ihr erstes Szenario bezieht, werde ich Ihrem Vorschlag folgen, etwas in die Codebasis zu bauen, um die Deserialisierung aufzuräumen. Vielleicht werde ich eine IXmlFinalizeDeserialization erstellen, die über alle meine Objekte hinweg aufgerufen werden kann, um diejenigen zu verfolgen, deren Deserialisierung unzureichend ist, und die Referenzen zu korrigieren. –