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

Langages Discussion :

Serialisation Objet c#


Sujet :

Langages

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2012
    Messages : 90
    Points : 60
    Points
    60
    Par défaut Serialisation Objet c#
    Bonjour,

    J'ai un soucis que je vais illustrer avec un cas d'école de sérialisation d'objet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        Person p = new Person
        {
            Id = 123,
            LastName = "Dupond",
            FirstName = "Jean",
            Address = new Address
            {
                Street = "1, rue du petit pont",
                ZipCode = "75005",
                City = "Paris",
                Country = "France"
            }
        };
    donnera donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <LastName>Dupond</LastName>
      <FirstName>Jean</FirstName>
      <Id>123</Id>
      <Address>
        <Street>1, rue du petit pont</Street>
        <ZipCode>75005</ZipCode>
        <City>Paris</City>
        <Country>France</Country>
      </Address>
    </Person>
    Je me retrouve donc dans un cas similaire et j'aimerais savoir si il était possible lors de la sérialisation que les informations des adresses (Street, ZipCode, City et Country) apparaissent au même niveau que les propriété LastName, FirstName.. pour avoir un rendu comme ci-dessous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <LastName>Dupond</LastName>
      <FirstName>Jean</FirstName>
      <Id>123</Id>
      <Street>1, rue du petit pont</Street>
      <ZipCode>75005</ZipCode>
      <City>Paris</City>
      <Country>France</Country>
    </Person>
    tout en conservant mon objet Adresse.

    Est-ce possible?

    Pour l'instant j'ai l'impression qu'il faut que j'oubli mon objet Adresse pour faire apparaitre ces infos directement dans mon objet Personne.

    Dans mon cas l'utilisation d'un objet A part entière Adresse simplifie un peu mon traitement du coup j'aimerai bien le garder.


    Cordialement,
    Christophe.

  2. #2
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Salut,

    utilises-tu les décorations pour la sérialisation XML ?
    Plus je connais de langages, plus j'aime le C.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2012
    Messages : 90
    Points : 60
    Points
    60
    Par défaut
    Je suis parti d'un code existant qui utilisait des DataMember[""] de la sorte:

    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
     
        [Serializable]
        [DataContract]
        public class Person
        {
            #region Properties
     
            private Adress adresse;
            /// <summary>
            /// Adress
            /// </summary>
            [DataMember(Name = "Adress")]
            public Adress Adresse
            {
                get { return adresse; }
                set { adresse= value; }
            }
     
    ...
    et dans mon objet "Adresse" pas de décoration.

    du coup j'avais dans mon résultat l'objet Adresse et ses composantes.

    J'ai essayé d'enlever le [DataMember(Name = "Adress")] et de les mettre sur ses propriétés comme [DataMember(Name = "Rue")] mais rien n'apparait.

    J'ai arrété là pour le moment et j'ai choisit ne plus utiliser d'objet Adresse pour gagner du temps. Mais ou cas ou évolution et pour information j'aimerai savoir si y'a un moyen si un tel cas se représentait.

  4. #4
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 568
    Points
    3 568
    Par défaut
    Avec l'interface IXmlSerializable, tu peux contrôler la façon dont le XML va être généré : https://msdn.microsoft.com/en-us/lib...v=VS.100).aspx
    Microsoft MVP : Windows Platform

    MCPD - Windows Phone Developer
    MCPD - Windows Developer 4

    http://www.guruumeditation.net

    “If debugging is the process of removing bugs, then programming must be the process of putting them in.”
    (Edsger W. Dijkstra)

  5. #5
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Une astuce simple (mais certainement moins propre que la solution que tu pourras trouver en creusant le lien filé par GuruuMeditation) c'est de faire des accesseurs public depuis Person qui expose les attributs de Address, et de dire d'ignorer l'attribut Address. Exemple :
    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
        public class Adresse
        {
            public int numero;
            public string rue;
            public string codePostal;
            public string ville;
        }
     
        public class Personne
        {
            public string nom;
            public string prenom;
            public DateTime naissance;
            [XmlIgnore]
            public Adresse adresse;
            public int numero {
                get { return adresse.numero; }
                set { adresse.numero = value; }
            }
            public string rue {
                get { return adresse.rue; }
                set { adresse.rue = value; }
            }
            public string codePostal {
                get { return adresse.codePostal; }
                set { adresse.codePostal = value; }
            }
            public string ville {
                get { return adresse.ville; }
                set { adresse.ville = value; }
            }
        }
    Tu peux également mettre ton attribut de type Address en private, du coup il ne sera pas sérialisé.
    Plus je connais de langages, plus j'aime le C.

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2012
    Messages : 90
    Points : 60
    Points
    60
    Par défaut
    Merci pour vos liens et astuce. Pour l'instant je vais rester sur le fait de ne plus utiliser l'objet Adresse mais vos liens sont très intéressant.

    Bonne journée et bon week end,
    Cordialement,
    Christophe.

  7. #7
    Membre éprouvé Avatar de worm83
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Février 2010
    Messages
    459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2010
    Messages : 459
    Points : 1 118
    Points
    1 118
    Par défaut
    La classe adresse est elle bien elle aussi décoré ?
    "Le train de tes injures roule sur le rail de mon indifférence."

    "Monde de merde !!"

    Georges Abitbol.

Discussions similaires

  1. Problème Serialisation Objet "complexe"
    Par l3st4t dans le forum C#
    Réponses: 3
    Dernier message: 19/10/2011, 12h24
  2. [serialisation] objet message
    Par docr1 dans le forum Général Java
    Réponses: 1
    Dernier message: 12/03/2009, 13h38
  3. Serialisation objet dans socket
    Par george72 dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 01/03/2009, 11h45
  4. Serialisation objet OracleClient
    Par CYFL dans le forum ASP.NET
    Réponses: 3
    Dernier message: 20/10/2008, 17h36
  5. serialisation objet cast
    Par Darkcristal dans le forum Langage
    Réponses: 1
    Dernier message: 07/04/2007, 00h40

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