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 :

Serialisation d'un élément pouvant être de plusieurs types


Sujet :

C#

  1. #1
    Membre actif Avatar de maxeur
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    416
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 416
    Points : 267
    Points
    267
    Par défaut Serialisation d'un élément pouvant être de plusieurs types
    Bonjour à tous,

    Je souhaite serialiser un élément pouvant être de plusieurs types


    Voila l'exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <Description>
    <LocalizedDescription Lang="en-GB-b">
    jghgghf
    </LocalizedDescription>
    <LocalizedDescription Lang="fr-FR">
    tetetetetetettete
    </LocalizedDescription>
    </Description>
    Ou bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <Description>
    tetetetetetettete
    </Description>
    Est ce que c'est possible??

    J'ai essyé de déclarer deux éléménts dans la classe de niveau supérieur portant le même nom mais cela me lève une exeption

    voici le code associé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    [XmlElement("Description")]
            public string descriptSimple
            {
                get { return _descriptSimple; }
                set { _descriptSimple = value; }
            }
     
            [XmlArray("Description"), XmlArrayItem("LocalizedDescription")]
            public List<LocalizedDescriptionClass> multidescript
            {
                get { return _multidescript; }
                set { _multidescript = value; }
            }
    J'ai aussi pensé à créer une classe contenant ces deux types d'éléments
    Voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    public class DescriptionClass
        {
            private string valeur;
            private List<LocalizedDescriptionClass> test;
     
            [XmlText]
            public string Valeur
            {
                get { return valeur; }
                set { valeur = value; }
            }
     
            [XmlElement("")]
            public List<LocalizedDescriptionClass> Test
            {
                get { return test; }
                set { test = value; }
            }
        }
            }
    Je voulais savoir si à la place de XmlElement(""), il existait un attribut permettant de récupérer simplement les élémént de moin tableau un peu comme XmlText fait avec une chaine de caractère.

    Avez vous une idée de la manière dont je peu réaliser cette opération?

    Merci d'avance pour vos réponses

  2. #2
    Membre expérimenté Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Points : 1 732
    Points
    1 732
    Par défaut
    Salut

    A vrai dire je comprend pas vraiment l'interet.

    Pourquoi ne pas faire systématiquement dans un tableau ? Même s'il n'y a qu'un seul élément.
    Puisque de toute façon tu ne pourra pas avoir deux propriétés du même nom dans ton objet C#.
    Tu as en plus un attribut "Lang", tu pourrais t'en servir en le plaçant à "default" ou "simple".

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <Description>
        <LocalizedDescription Lang="default">Description simple</LocalizedDescription>
        <!-- ou -->
        <LocalizedDescription Lang="en-GB-b">jghgghf</LocalizedDescription>
        <LocalizedDescription Lang="fr-FR">tetetetetetettete</LocalizedDescription>
    </Description>


    Sinon, tu pourrais faire un format du style :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <Description>
        <SimpleDesc>description simple</SimpleDesc>
        <LocalizedDescription Lang="en-GB-b">jghgghf</LocalizedDescription>
        <LocalizedDescription Lang="fr-FR">tetetetetetettete</LocalizedDescription>
    </Description>

    Ou encore :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <Description simpledesc="Description simple">
        <LocalizedDescription Lang="en-GB-b">jghgghf</LocalizedDescription>
        <LocalizedDescription Lang="fr-FR">tetetetetetettete</LocalizedDescription>
    </Description>

  3. #3
    Membre actif Avatar de maxeur
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    416
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 416
    Points : 267
    Points
    267
    Par défaut
    En fait je fai comme cela car je dois récupérer ces données. Ce n'est pas moi qui génère le fichier mais je dois récupérer les informations d'un fichier

  4. #4
    Membre actif Avatar de maxeur
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    416
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 416
    Points : 267
    Points
    267
    Par défaut
    J'ai trouvé la réponse à mon problème

    Premièrement dans la définition des accesseurs, il faut mettre l'autre élémént à null lorsque l'on veut donner une valeur à un élémént.

    Ensuite, Déclarer une classe avec le nom des deux éléments vide, puis instancier les objet au moment où sont attribuées les valeurs

    Voici le code pour que ce soit plus clair.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    using System.Collections.Generic;
    using System.Xml.Serialization;
     
    namespace AllenBradley
    {
        public class DescriptionClass
        {
            private string _valeur;
            private List<LocalizedDescriptionClass> _LocalizedDescription;
     
            [XmlText]
            public string valeur
            {
                get { return _valeur; }
                set { 
                    _valeur = value;
                    _LocalizedDescription = null;
                }
            }
     
            [XmlElement("")]
            public List<LocalizedDescriptionClass> LocalizedDescription
            {
                get { return _LocalizedDescription; }
                set { 
                    _LocalizedDescription = value;
                    _valeur = null;
                }
            }
        }
    }
    Pour la déclaration de la classe

    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    DescriptionClass d = new DescriptionClass();
                    d.valeur = "Chaine Premier";
                    Controller.Description = d;
     
                    List<LocalizedDescriptionClass> list = new List<LocalizedDescriptionClass>();
     
                    LocalizedDescriptionClass l = new LocalizedDescriptionClass();
                    l.Lang = "fr-FR";
                    l.valeur = a1.migrProg.project_description;
                    list.Add(l);
     
                    l = new LocalizedDescriptionClass();
                    l.Lang = "en-GB";
                    l.valeur = XmlGenerique<RSLogix5000Content>.TranslateText(a1.migrProg.project_description,"francais");
                    list.Add(l);
     
                    d.LocalizedDescription = list;
                    Controller.Description = d;
    pour l'instanciation de mes éléménts

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

Discussions similaires

  1. [MCD] Entité pouvant être associée à une parmi plusieurs autres
    Par CinePhil dans le forum Schéma
    Réponses: 1
    Dernier message: 29/12/2010, 21h09
  2. Réponses: 14
    Dernier message: 13/09/2007, 12h26
  3. lister toutes les exceptions pouvant être lancées
    Par fabaroulettes dans le forum Langage
    Réponses: 2
    Dernier message: 02/03/2007, 18h05
  4. [XSD]noeud pouvant être de plusieurs types
    Par jesus144 dans le forum Valider
    Réponses: 2
    Dernier message: 12/04/2006, 14h03
  5. [ImageMagick] Image ne pouvant être affichée car elle contient des erreurs
    Par hutchuck dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 09/12/2005, 13h59

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