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