В моем хранилище есть List<Student>
, List<Course>
и List<Enrolment>
, где в Enrollment есть Enrolment.Student и Enrolment.Course, которые ссылаются на одного из студентов или курсов в двух предыдущих списках.
Когда я использую XmlSerializer в моем хранилище, он выводит избыточные данные, поскольку сериализует все свойства каждого учащегося в List<Student>
, а затем снова для каждой ссылки на тех же учеников в List<Enrolment>
. Я ищу элегантный способ решить эту проблему.
После десериализации я могу исправить ссылки, используя значения идентификаторов в экземплярах дублированных объектов, созданных десериализацией, но это кажется хакерским.
Один из способов исправить избыточный вывод - использовать XmlIgnore Enrolment.Student и Enrolment.Course и создать еще два свойства для сериализации - Enrolment.StudentID и Enrolment.CourseID. Однако во время десериализации ссылки на Enrolment.Student и Enrolment.Course не могут быть установлены (AFAIK), поскольку результаты десериализации List<Student>
и List<Course>
недоступны.
Еще один метод, о котором я подумал, - это сериализацию внизу в моей иерархии объектов, делая каждый из моих списков отдельно и контролируя порядок десериализации - я, скорее, не делаю этого.
Другим методом может быть XmlIgnore List<Enrolment>
и создание вспомогательного класса сериализации регистрации, который инициализирует List<Enrolment>
после завершения десериализации. Это похоже на большие усилия.
Как другие люди сериализуют / десериализуют несколько ссылок на один и тот же объект с помощью XmlSerializer?