2011-02-28 1 views
0

Использование C#, я хочу десериализовать xml из разных источников в объекты общего типа. XML не будет иметь одну и ту же схему. Например, в следующем xml /thingContainer/thing/name и widget/@title оба будут отображаться на myClass.DisplayName.Deserialize XML с различными схемами в общий тип

Xml1:

<thingContainer> 
    <thing> 
     <name>MyName</name> 
    </thing> 
</thingContainer> 

xml2:

<widget title="myTitle" /> 

Таким образом, я не могу сверстать свой класс с [XmlElement], так как она будет отличаться в зависимости от источника моего XML. Есть ли какой-то трюк, который я могу сделать с наследованием или некоторым вспомогательным классом, который позволит мне легко десериализовать xml из разных источников? Есть ли простой способ сопоставить поля классов с xpaths?

Конечно, если мне нужно, я проанализирую и вручную десериализую xml ... но что это за забава?

ответ

1

Две мысли, которые сразу приходят на ум:

  • Использование XSLT для преобразования исходного XML в промежуточный формат, который соответствует вашей объектной модели (очень популярный подход, хотя лично я презираю XSL)
  • Создать временные объектные модели для десериализации, а затем сопоставить их с конечной объектной моделью.

Возможно, существует некоторый хакерство XmlElement, но похоже, что это будет беспорядочный подход.

0

Я думаю, что у вас есть два варианта здесь:

  1. Реализовать IXmlSerializable для своего класса и десериализации, принимая во внимание структуру вашего XML
  2. Просто используйте LINQ к XML для разбора XML и создать экземпляр твой класс. Это подход, который я бы выбрал (сам первый и не понравился)
Смежные вопросы