2010-08-07 6 views
3

J'ai un schéma XSD que j'ai généré une classe pour utiliser xsd.exe, et j'essaye d'utiliser XmlSerializer.Deserialize pour créer une instance de cette classe à partir d'un fichier XML qui est supposé être conforme au schéma XSD . Malheureusement, le fichier XML contient des éléments supplémentaires que le schéma n'attend pas, ce qui provoque un System.InvalidOperationException à partir de Deserialize.XmlSerializer.Deserialize - ignore les éléments inutiles?

J'ai essayé d'ajouter des éléments <xs:any> à mon schéma, mais cela ne semble pas faire de différence.

Ma question est: est-il possible d'obtenir XmlSerializer.Deserialize pour ignorer ces éléments supplémentaires?

Répondre

2

Je ne pense pas qu'il existe une option pour ce faire. Vous devez soit corriger le schéma, soit modifier manuellement le code généré par xsd.exe pour permettre la désérialisation du code XML. Vous pouvez également essayer d'ouvrir le document XML document + schéma dans Visual Studio ou tout autre éditeur XML avec la prise en charge de schéma pour résoudre le schéma ou le document XML.

+0

Je m'habitue à devoir modifier la sortie de xsd.exe maintenant ... Il semble presque inutile. Je pense que je vais juste analyser le XML moi-même plutôt que de le désérialiser à partir d'un schéma. Depuis que j'ai décidé que, après avoir relu votre réponse, je la marquerai comme acceptée :) Merci! –

5

ajouter habituellement des propriétés supplémentaires ou des champs à toutes les classes d'entités pour ramasser des éléments supplémentaires et attributs, ressemblant à quelque chose comme le code ci-dessous:

[XmlAnyAttribute] 
public XmlAttribute[] AnyAttributes; 

[XmlAnyElement] 
public XmlElement[] AnyElements; 

En fonction de la complexité de votre code généré, vous ne pouvez pas trouver insertion manuelle de ce code sur toutes les entités faisant appel. Peut-être que seulement-un peu moins fastidieux définit ces attributs dans une classe de base et s'assure que toutes les entités héritent de la base.

Pour donner une attribution équitable, j'ai été initié à ce modèle lors de la lecture du code source de DasBlog.

+0

Très utile - merci! – JoeS

Questions connexes