Ведение информации XML-иерархии (то есть parent-child) в объектах, сгенерированных XmlSerializer
В течение некоторого времени я пытался решить следующую проблему, и у меня заканчиваются идеи:
Я сгенерировал набор классов C # из схемы xsd с помощью инструмента xsd.exe, и десериализация файлов XML работает нормально. Проблема заключается в том, что помимо удобства и безопасности использования автоматически сгенерированных классов мне также нужна информация об иерархии xml, т.е. мне нужно установить отношения родитель-потомок между объектами, созданными во время десериализации. Обратите внимание, что я хочу избежать сохранения отдельной иерархической структуры xml (например, дерева DOM), а сделать так, чтобы сгенерированные объекты отслеживали своих родителей и детей.
Мне удалось осуществить это в Java с помощью JAXB:
Определение общего базового класса для всех десериализованных объектов. Этот базовый класс содержит список дочерних элементов и ссылку на родительский объект (если есть).
Использование функциональности Unmarshaller.Listener, которая обеспечивает обратный вызов при завершенной десериализации объекта. Этот обратный вызов предоставляет ссылку на родителя недавно десериализованного объекта, что делает установление родительско-дочерних отношений тривиальным.
Как бы я поступил так в C #? Я посмотрел документы MSDN и довольно много гуглил, но не смог найти никакой полезной информации.