Можно ли выполнить сериализацию с циклическими ссылками? - PullRequest
13 голосов
/ 15 февраля 2011

Итак, мой класс сущности (написанный на C #) следует родительской дочерней модели, где у каждого дочернего объекта должно быть свойство Parent, в котором он хранит ссылку на своего родителя.Объект из-за циклических ссылок.

Я не могу удалить ссылку на родителя, также я не могу пометить ее как XmlIgnore (поскольку мне нужно прочитать ее обратно, когда я десериализирую XML)идеи по этому поводу?

Ответы [ 2 ]

11 голосов
/ 15 февраля 2011

XML-сериализация не поддерживает циклические ссылки, вам нужно исключить родительское свойство из сериализации, используя атрибут XmlIgnore. См. в этом блоге о том, как сохранить отношения при десериализации.

В качестве альтернативы, вы можете использовать DataContractSerializer вместо XmlSerializer. Он поддерживает циклические ссылки, но не обеспечивает большого контроля над схемой XML ...

11 голосов
/ 15 февраля 2011

Вы можете создать свой собственный XMLSerializer или использовать атрибут DataContractSerializer и [DataContract(IsReference= true)], чтобы сообщить сериализатору запомнить ссылки .

...