Возможно ли выполнить сериализацию с помощью циркулярных ссылок?
Итак, мой класс сущности (написанный на С#) следует за родительской дочерней моделью, где каждый дочерний объект должен иметь свойство родителя, в котором он сохраняет ссылку на свой родитель.
Это свойство родителя вызывает проблемы при сериализации объекта из-за циклических ссылок.
Я не могу удалить ссылку на родителя, и я не могу пометить ее XmlIgnore (так как мне нужно ее прочитать, когда я десериализую XML)
Любые идеи по этому поводу?
Ответы
Ответ 1
Сериализация XML не поддерживает циклические ссылки, вам нужно исключить родительское свойство из сериализации с помощью атрибута XmlIgnore
. См. это сообщение в блоге, чтобы поддерживать отношения при десериализации.
В качестве альтернативы вы можете использовать DataContractSerializer
вместо XmlSerializer
. Он поддерживает циклические ссылки, но не обеспечивает большого контроля над XML-схемой...
Ответ 2
Вы можете либо создать свой собственный XMLSerializer
, либо использовать DataContractSerializer
и [DataContract(
IsReference
= true)]
, чтобы сообщить сериализатору запомнить ссылки.