6
votes

Comment décorer / définir des membres de la classe d'un élément XML optionnel à utiliser avec XMLSerializer?

J'ai la structure XML suivante. L'élément theelement peut contenir ortoptionallist ou non: xxx

Qu'est-ce qu'un moyen propre d'exprimer la structure de classe correspondante?

Je suis sûr de ce qui suit: xxx

ainsi que: xxx

mais quoi À propos de Théellement ? Est-ce que je prends l'élément theoptionallist en tant que type de tableau pour que ce soit lue ce qu'il trouve dans le fichier (rien ou une), puis de vérifier le code s'il est là ou non? Ou existe-t-il un autre décorateur que je puisse fournir? Ou est-ce que cela fonctionne simplement?

EDIT: J'ai fini par utiliser des informations de Cette réponse .


0 commentaires

3 Réponses :


5
votes

On dirait que vous pouvez utiliser un autre bool pour spécifier pour inclure un élément ou non.

Une autre option consiste à utiliser un modèle spécial pour créer un champ booléen reconnu par le xmlSerializer et appliquer le xmlignoreattribute sur le terrain. Le motif est créé sous la forme de ProtitierAmamesPepéfié. Par exemple, s'il y a un champ nommé "MyFirstName" Vous créeriez également un champ nommé "MyfirstnamesPecified" qui demande à l'XMLSérialisateur de savoir si Générez l'élément XML nommé "MyFirstName". Ceci est montré dans le Exemple suivant. xxx

http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlSerializer.aspx


2 commentaires

Merci pour la réponse. Cet exemple traite de la sérialisation, qui fait partie de ce que je suis confronté. L'autre partie est la désérialisation. Et si j'appelle désériorize () sur un fichier avec ce format? Parce que je ne pense pas que je puisse dire à la xmlserializer pour le fichier dans son ensemble à quoi attendre par élément. En d'autres termes, existe-t-il un comportement par défaut si je désérialise et que cela ne voit pas un membre spécifié dans la classe?


Oui, il existe un comportement par défaut: le constructeur par défaut de la classe. Lorsque vous désérialisez votre XML, le xmlSerializer appelle le constructeur par défaut pour créer vos objets. Vous pouvez donc définir vos valeurs par défaut ici. Il est généralement utile de définir des valeurs par défaut pour les propriétés de la rétrécissement par défaut et de l'annexe : ceci () sur vos autres constructeurs pour que vos valeurs par défaut sont définies en premier.



8
votes

essayez d'ajouter isnlullable = true au xmlarrayitem attribut.


3 commentaires

Merci pour la réponse James. Je suppose que cela gérerait un élément ortoptionallist sans éléments, mais cela gérerait-il théoptionalliste non existant du tout? (Je ne comprendrais peut-être pas ce que vous suggérez.) De plus, il n'y a pas de schéma pour mon format; Tout est par accord verbal entre moi et un autre développeur. :)


Je ne suis pas positif, mais je pense qu'utiliser islamllable l'excluait si le tableau est null.


Considérer un schéma. Il est très utile, aussi petit et est une excellente pièce pour votre «boîte à outils».



1
votes

Supplément à la propriété xxyspecifed , il existe également une méthode avec un ostSerialize préfixe xxx


0 commentaires