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

Windows Communication Foundation .NET Discussion :

Problème au niveau de la Serialization


Sujet :

Windows Communication Foundation .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Responsable d’exploitation informatique
    Inscrit en
    Novembre 2004
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d’exploitation informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 134
    Par défaut Problème au niveau de la Serialization
    Bonjour,

    Voici mes Contrats :

    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
    32
    33
    34
    35
    36
    37
    38
    39
        [DataContract]
        public class Foo
        {
            private string name = null;
            private Record[] _records = null;
     
            [DataMember]
            public string name
            {
                get { return _name; }
                set { _name = value; }
            }
            [DataMember]
            public Record[] records
            {
                get { return _records; }
                set { _records = value; }
            }
        }
     
        [DataContract]
        public class Record
        {
            private string _name = null;
            private string _reference = null;
     
            [DataMember]
            public string name
            {
                get { return _name; }
                set { _name = value; }
            }
            [DataMember]
            public string reference
            {
                get { return _reference; }
                set { _reference = value; }
            }
        }
    Voilà ce que j'obtiens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <Foo>
      <name></name>
      <records>
        <Record>
          <name></name>
          <reference></reference>
        </Record>
        <Record>
          <name></name>
          <reference></reference>
        </Record>
      </records>
    </Foo>
    Et voici ce que je souhaiterais obtenir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <Foo>
      <name></name>
      <Record>
          <name></name>
          <reference></reference>
      </Record>
      <Record>
        <name></name>
        <reference></reference>
      </Record>
    </Foo>
    Auriez-vous une idée de la procédure à mettre en place ?
    Merci d'avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Cartman.inc Voir le message
    Auriez-vous une idée de la procédure à mettre en place ?
    Le serializer utilisé par défaut est la classe DataContractSerializer et cette dernière ne permet pas de faire ce que tu veux.
    Ce que je te propose c'est de passer par une classe personnalisée qui saura sérialiser et désérialiser tes données comme tu veux qu'elles soient.
    Pour la création de cette classe personnalisée tu dois passer par l'héritage de la classe abstraite XmlObjectSerializer; Mais ça se crose vu qu'il y a pas
    mal de méthode à implémenter.
    Si t'arrive à définir ta classe personnalisée alors deux cas d'urtilisations se posent :
    1 - t'utilises les contracts pour pouvoir seulement sérialiser dans ou désérialiser à partir d'un fichier xml. Alors là pas de problème. Il suffit d'utiliser les méthode de ton serializer perso.
    2 - t'utilises WCF, alors là il faut configurer WCF, pour qu'il utilise ton serializer et non celui par défaut.

  3. #3
    Membre confirmé
    Homme Profil pro
    Responsable d’exploitation informatique
    Inscrit en
    Novembre 2004
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d’exploitation informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 134
    Par défaut
    Merci pour ta réponse mais cela représente un travail monstre pour moi car j'ai beaucoup de classe dans ce cas là.

    Par contre, j'ai trouvé quelque chose de plus simple => Je rajoute une balise [XmlElement(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] au niveau de mon tableau d'objet et cela retire le niveau que je souhaitais :
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    [DataContract]
        public class Foo
        {
            private string _name = null;
            private Record[] _records = null;
     
            [DataMember]
            public string name
            {
                get { return _name; }
                set { _name = value; }
            }
            [DataMember]
            [XmlElement(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
            public Record[] records
            {
                get { return _records; }
                set { _records = value; }
            }
        }
     
        [DataContract]
        public class Record
        {
            private string _name = null;
            private string _reference = null;
     
            [DataMember]
            public string name
            {
                get { return _name; }
                set { _name = value; }
            }
            [DataMember]
            public string reference
            {
                get { return _reference; }
                set { _reference = value; }
            }
        }

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Cartman.inc Voir le message
    Par contre, j'ai trouvé quelque chose de plus simple => Je rajoute une balise [XmlElement(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] au niveau de mon tableau d'objet et cela retire le niveau que je souhaitais :
    Bizarre quand même quand je vois que mon test avec ta solution ne marche.
    T'es sûr que ça marche en mettant cet attribut ?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Au fait t'utilises quel serializer XmlSerializer ou DataContractSerializer ?
    avec DataContractSerializer, ça marchera pas avec ta solution précédente
    mais ça marchera avec XmlSerializer.

  6. #6
    Membre confirmé
    Homme Profil pro
    Responsable d’exploitation informatique
    Inscrit en
    Novembre 2004
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d’exploitation informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 134
    Par défaut
    J'utilise le DataContractSerializer donc ça ne marche pas.

    J'ai fait un test en sérialisant mon objet sans passer par le WCF

Discussions similaires

  1. [UBUNTU] Problème au niveau du partitionnement
    Par Louis-Guillaume Morand dans le forum Ubuntu
    Réponses: 19
    Dernier message: 19/07/2006, 18h05
  2. [CSS] Problème au niveau de la résolution
    Par shukin dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 28/10/2005, 13h29
  3. [PPC][C#][SQL2000] Problème au niveau de donné controlé
    Par Roach dans le forum Windows Forms
    Réponses: 16
    Dernier message: 21/09/2005, 22h08
  4. problème au niveau de restore database
    Par Redouane dans le forum Administration
    Réponses: 2
    Dernier message: 07/09/2005, 11h49
  5. [DNS MX]Avec DynDNS.org, problème au niveau du MX
    Par Swoög dans le forum Développement
    Réponses: 9
    Dernier message: 24/08/2004, 22h00

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