2 votes

liste toutes les propriétés avec [XmlAttribute] de la classe donnée

Par exemple, j'ai une classe simple

class SomeCfg
{
    [XmlAttribute("ArchivePath")]
    public string ArchivePath { get; set; }
}

Comme on peut le voir, la classe donnée possède une propriété avec Xml Attribut . Mais quand l'exécution du programme arrive à ce code

 var t = typeof (SomeCfg);
 var props = t.GetProperties().Where(
    prop => Attribute.IsDefined(prop, typeof(XmlAttribute)));

Le runtime lève l'exception

System.ArgumentException: Type passed in must be derived from System.Attribute or System.Attribute itself.

Bien sûr, quand j'ai vu la hiérarchie des types, j'ai compris que c'était vrai (je ne vais pas expliquer pourquoi il n'hérite pas de cette classe).

Ma question est de savoir comment lister ces propriétés (créer une classe qui hérite de XmlAttribute et System.Attribute n'est pas une option dans ce cas).

Selon l'étiquette de la question, la version de .Net est 4.0.

3voto

001 Points 52

Est-il possible que vous ayez utilisé System.Xml.XmlAttribute au lieu de System.Xml.Serialization.XmlAttributeAttribute ?

System.Xml.XmlAttribute est utilisé pour représenter un attribut du document xml. System.Xml.Serialization.XmlAttributeAttribute spécifie que le XmlSerializer doit sérialiser le membre de la classe comme un attribut XML.

1voto

Faraz Ahmed Points 573

Vous pouvez obtenir des propriétés contenant XMLAttribut à partir du code suivant..

var props = t.GetProperties()
             .Where(prop =>
                 prop.GetCustomAttributes(typeof(XmlAttributeAttribute), false).Any(PropType => PropType.GetType() == typeof(XmlElementAttribute) ||
                                                         PropType.GetType() == typeof(XmlAttributeAttribute)));

si vous ne voulez pas utiliser le plein LINQ alors cet article vous sera également utile.

Sérialiser toutes les propriétés d'une classe en tant qu'attributs au lieu d'éléments

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X