IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[Serialization] Changer un XmlElement name dynamiquement


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 39
    Par défaut [Serialization] Changer un XmlElement name dynamiquement
    Bonjour,

    J'ai un export de fichier à faire sous forme d'un document XML. La structure est relativement simple (4 classes) et j'utilise la sérialisation standard .NET (XmlSerializer). Le seul souci est que je viens d'être averti que dans un cas particulier, il faut changer le nom d'une balise. J'aimerai faire ça proprement (sans dupliquer une classe) : il faut donc que je puisse contrôler le nom de cette balise en runtime. Après quelques recherches je soupçonne l'utilisation de la classe XmlAttributeOverrides, mais je ne comprends pas trop comment elle fonctionne...

    Est-ce que quelqu'un aurait des infos sur le sujet ?

    Merci !

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 39
    Par défaut
    Auto réponse pour ceux que ça intéresse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    XmlAttributes newattributes = new XmlAttributes();
    attrs.XmlElements.Add(new XmlElementAttribute { ElementName = "MyNewElementName"});
     
    XmlAttributeOverrides overrides = new XmlAttributeOverrides();
    overrides.Add(typeof(MyRootClass), "MyCollectionMember", newattributes);
     
    XmlSerializer xs = new XmlSerializer(typeof(MyRootClass), overrides);
    Petites précisions:
    Ce qui m'a le plus posé problème est que l'élément dont je souhaitais surcharger le nom est une collection, mais sans XmlArray défini :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <MyClass>
        <MyOldElementName (...) </MyOldElementName>
        <MyOldElementName (...) </MyOldElementName>
    </MyClass>
     
    et non (comme c''est souvent le cas)
     
    <MyClass>
        <MyOldElementNames>
            <MyOldElementName (...) </MyOldElementName>
            <MyOldElementName (...) </MyOldElementName>
        <MyOldElementNames>
    </MyClass>
    En faisant comme indiqué ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    XmlAttributes newattributes = new XmlAttributes();
    newattributes.XmlArray = new XmlArrayAttribute { ElementName = "" };
    newattributes.XmlArrayItems.Add(new XmlArrayItemAttribute("MyNewElementName", typeof(MyCollectionItem)));
     
    XmlAttributeOverrides overrides = new XmlAttributeOverrides();
    overrides.Add(typeof(MyRootClass), "MyCollectionMember", newattributes );
     
    XmlSerializer xs = new XmlSerializer(typeof(MyRootClass), overrides);
    Mais, quoi que je tente avec la propriété XmlArray, ça n'a rien donné, car si rien n'est spécifié la sérialisation standard reprend le nom du membre comme XmlArray par défaut. Ce qui qui donnait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <MyClass>
        <MyCollectionMember>
            <MyNewElementName(...) </MyNewElementName>
            <MyNewElementName(...) </MyNewElementName>
        <MyCollectionMember>
    </MyClass>
    Le premier bout de code donne bien ce que je recherchais, à savoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <MyClass>
        <MyNewElementName (...) </MyNewElementName >
        <MyNewElementName (...) </MyNewElementName >
    </MyClass>
    Conclusion : Si les items de votre collection sont inclus dans une balise XmlArray, utilisez la seconde solution, sinon, la première.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [DOM] Changement de l'attribut name dynamique
    Par Metal3d dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 25/06/2008, 16h39
  2. Changer le "Common Name" ou CN d'une BAL
    Par gomodo dans le forum Exchange Server
    Réponses: 0
    Dernier message: 28/04/2008, 09h47
  3. Changer version du Kernel dynamiquement (dans un chroot)
    Par asher256 dans le forum Administration système
    Réponses: 3
    Dernier message: 04/01/2008, 15h39
  4. [<select name=...>]Dynamique depuis MySQL
    Par Jean_Benoit dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/05/2006, 11h50
  5. getElementByName ne compte pas le name dynamique ???
    Par SpaceFrog dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 27/10/2005, 14h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo