Mi repositorio tiene List<Student>
, List<Course>
y List<Enrolment>
donde una inscripción tiene Enrolment.Student y Enrolment.Course que son referencias uno de los estudiantes o cursos en las dos listas anteriores..NET XmlSerializer y múltiples referencias al mismo objeto
Cuando uso XmlSerializer en mi repositorio genera datos redundantes, ya que serializa todas las propiedades de cada alumno en List<Student>
, luego de nuevo por cada referencia a esos mismos estudiantes en List<Enrolment>
. Estoy buscando una forma elegante de resolver esto.
Después de deserialización puedo arreglar las referencias utilizando los valores de ID en las instancias de objetos duplicados creados por la deserialización pero esto parece hacker.
Un método para corregir la salida redundante es XmlIgnore Enrolment.Student y Enrolment.Course y crear dos propiedades más para la serialización: Enrolment.StudentID and Enrolment.CourseID. Sin embargo, durante la deserialización, no se pueden establecer las referencias para Enrolment.Student y Enrolment.Course (AFAIK) ya que los resultados de la deserialización de List<Student>
y List<Course>
no están disponibles.
Otro método pensé es serializar más abajo en mi jerarquía de objetos haciendo cada una de mis listas por separado y controlar el orden de deserialización - Prefiero no hacer esto.
Otro método sería crear XmlIgnore List<Enrolment>
y crear una clase auxiliar de serialización de inscripción que inicialice List<Enrolment>
después de que se complete la deserialización de sí mismo. Esto parece mucho esfuerzo.
¿Cómo otras personas serializar/deserializar múltiples referencias al mismo objeto usando XmlSerializer?
Muy tranquilizador. Siendo nuevo en esto, asumí que debía perderme algo. Dado que mi problema se relaciona con su primer escenario, seguiré su sugerencia de incorporar algo en la base de códigos para ordenar la deserialización. Tal vez crearé un IXmlFinalizeDeserialization que se puede invocar en todos mis objetos, rastreando aquellos cuya deserialización es inadecuada y corrige las referencias. –