Mappage des valeurs XML au type enum
J'ai besoin de parser un fichier XML que je reçois de tiers à des objets C#.
Certains des XML-je recevoir ont des valeurs d'une énumération qui je veux stocker dans un type enum.
Par exemple, j'ai le xsd suivant du fichier xml:
<xsd:simpleType name="brandstof">
<xsd:restriction base="xsd:string">
<!-- Benzine -->
<xsd:enumeration value="B" />
<!-- Diesel -->
<xsd:enumeration value="D" />
<!-- LPG/Gas -->
<xsd:enumeration value="L" />
<!-- LPG G3 -->
<xsd:enumeration value="3" />
<!-- Elektrisch -->
<xsd:enumeration value="E" />
<!-- Hybride -->
<xsd:enumeration value="H" />
<!-- Cryogeen -->
<xsd:enumeration value="C" />
<!-- Overig -->
<xsd:enumeration value="O" />
</xsd:restriction>
</xsd:simpleType>
Je veux cette carte à un enum, et j'ai reçu ce jour:
public enum Fuel
{
B,
D,
L,
E,
H,
C,
O
}
Le problème que j'ai, c'est que le xml peut contenir une valeur de 3
qui je ne peux pas me mettre dans le type enum. Est-il une solution pour mettre cette valeur de l'enum.
Je peux aussi obtenir d'autres valeurs avec un -
ou un /
en eux et que je veux mettre dans un type enum.
Anu suggestions sont les bienvenues!
source d'informationauteur Gerard
Vous devez vous connecter pour publier un commentaire.
Vous pouvez analyser l'attribut xml valeur d'un type enum avec:
Mais je ne pense pas que vous aurez vraiment loin avec votre "spécial" des valeurs (
3
a/
etc.).Pourquoi ne pas vous définir votre énumération que
Et écrire une méthode statique pour convertir une chaîne de caractères à un membre enum?
Une chose que vous pouvez regarder dans pour la mise en œuvre d'une telle méthode serait d'ajouter des attributs personnalisés pour l'enum membres contenant leur représentation sous forme de chaîne - si une valeur n'a pas d'équivalent exact dans l'énumération, pour un look membre de l'attribut.
La création d'un tel attribut est facile:
Et puis vous pouvez les utiliser dans votre enum:
Ces deux méthodes vont vous aider à analyser une chaîne de caractères dans un enum membre de votre choix:
Et pendant que j'y suis: c'est l'inverse 😉
Décorer avec le
XmlEnum
attribut: http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlenumattribute.aspxPourquoi ne pouvez-vous pas analyser la chaîne
Si vous avez vraiment sérialiser comme une chaîne de caractères.
J'ai créé une classe qui gère ce:
Vous n'avez qu'à lire le fichier xml de la première et de mettre les valeurs dans une liste, vous pouvez le faire avec l'objet XElement par exemple.
//Edit:
Comme ceci: