Ведение информации XML-иерархии (то есть parent-child) в объектах, сгенерированных XmlSerializer - PullRequest
1 голос
/ 01 декабря 2009

Я уже некоторое время пытаюсь решить следующую проблему, и у меня заканчиваются идеи:

Я сгенерировал набор классов C # из схемы xsd с помощью инструмента xsd.exe, и десериализация XML-файлов работает нормально. Проблема заключается в том, что помимо удобства и безопасности использования автоматически сгенерированных классов мне также нужна информация об иерархии xml, т.е. мне нужно установить отношения родитель-потомок между объектами, созданными во время десериализации. Обратите внимание, что я хочу избежать сохранения отдельной иерархической структуры XML (например, дерева DOM), но вместо этого заставлять сгенерированные объекты отслеживать своих родителей и детей.

Мне удалось осуществить это в Java с помощью JAXB:

  1. Определение общего базового класса для всех десериализованных объектов. Этот базовый класс содержит список дочерних элементов и ссылку на родительский объект (если есть).

  2. Использование функциональности Unmarshaller.Listener, которая обеспечивает обратный вызов при завершенной десериализации объекта. Этот обратный вызов предоставляет ссылку на родителя недавно десериализованного объекта, что делает установление родительско-дочерних отношений тривиальным.

Как бы я поступил так в C #? Я посмотрел документы MSDN и довольно много гуглил, но не смог найти никакой полезной информации.

Ответы [ 2 ]

2 голосов
/ 15 апреля 2011

Я написал статью об этой проблеме, может быть, она вам поможет.

http://www.thomaslevesque.com/2009/06/12/c-parentchild-relationship-and-xml-serialization/

0 голосов
/ 01 декабря 2009

XmlSerializer должен поддерживать простые иерархии объектов для сериализации и десериализации. Сложные вещи, такие как массивы или списки, содержащие более одного типа объектов, немного сложнее. , , но возможно.

...