Обновление XML-схемы программно - PullRequest
1 голос
/ 29 июня 2010

Я нахожусь в процессе переписывания проекта из-за того, что поставщику платформы требуется механизм хранения в объекте XElement вместо хранения в таблицах данных, которые я создаю в их базе данных.Это становится болезненным, и мне нужно немного понимания.

Я могу преобразовать свой объектный граф в / из Xml с помощью XmlSerializer и читать / записывать в / из объекта XElement, который мне дан, но я неЯ уверен, как обновить данные XML, когда мне нужно изменить граф объектов.

Кто-нибудь сталкивался с этим, и какие статьи оказались наилучшими, чтобы узнать, как создать такую ​​методологию обновления.Спасибо.

1 Ответ

1 голос
/ 01 июля 2010

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

Я не думаю, что генерируются какие-либо схемы XML, единственной «схемой» является скомпилированный специальный код сериализатора XML.

Вы могли бы делать то, что хотите, 1) создавая новые классы, которые отражают ваши изменения, 2) десериализовать XML в старые классы, 3) применять морфингмежду старыми и новыми объектами, 4) сериализацию новых объектов, 5) изменение имен классов на старые, 6) замена временных имен в XML,

, но это чрезвычайно болезненно (хотя это может быть нормальнокак разовый).

Если вам нужно справиться с частыми изменениями (или если вы используете недопустимые для сериализации компиляторы, такие как текущий F # one), то лучшая идея здесь - написать ваш собственный XmlSerializer (возможно, с использованием Linq2XML), который может справиться с изменениями кода.

...