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 :

Sérialiser plusieurs objets


Sujet :

C#

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 50
    Points : 20
    Points
    20
    Par défaut Sérialiser plusieurs objets
    Bonjour!
    J'aimerais pouvoir exporter et importer des projets sur mon logiciel, pour cela je remplis toutes mes classes avec différents objets. J'aimerai pouvoir tous les sérialiser en même temps dans un même fichier, et pouvoir les dé-sérialiser de la même sorte. J'ai testé en SOAP pour un objet et ça fonctionne bien, mais ça me créé un fichier SOAP par objet. J'ai donc mis tous mes objets à la suite dans le fichier, mais derrière je n'arrive pas à les dé-sérialiser... Tous les exemples que j'ai trouvé sur le net sont faits avec un seul objet, or moi c'est tous mes objets dont j'ai besoin.
    Une solution?
    Cordialement

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    Un objet racine peut contenir plein d'autres objets

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Points : 1 498
    Points
    1 498
    Par défaut
    Salut,

    En .net de manière générale on sérialize un objet dans un fichier appelons-le pièce (d'une maison).

    Rien ne t'empèche de créé un super objet comprenant tous les ojets que tu voudra sérialisez, que nous appellerons maison:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class Maison
    {
       public IEnumerable<Piece> Pieces;
       public Garage Garage;
      ...
    }
    => et le tour est joué.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 50
    Points : 20
    Points
    20
    Par défaut
    @nico-pyright(c) : tu veux dire en faisant des collections d'autres objets dans mon objet? J'aimerai éviter ça et je n'étais pas sûre que ça fonctionnerait mais bon je vais peut-être devoir m'y résoudre.

    @mermich : IEnumerable est une façon de faire une collection c'est ça?

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Points : 1 498
    Points
    1 498
    Par défaut
    Tout à fait.

    C'est l'interface de base des listes.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 50
    Points : 20
    Points
    20
    Par défaut
    Je peux pas plutôt mettre un ICollection ?
    (d'ailleurs si quelqu'un a un petit exemple au niveau de la déclaration des collections et de leur implémentation, car je n'en ai jamais fait en Csharp et quand je teste ça me dit à l'ajout d'un objet dans la collection que la référence d'objet n'est pas lié à une instance d'objet... ^^)

  7. #7
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    il faut instancier une collection avec une classe concrète, comme une liste

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 50
    Points : 20
    Points
    20
    Par défaut
    C'est à dire?? Concrètement, il faut faire quoi? Car j'ai l'impression d'avoir tout essayé mais rien ne marche, et je n'ai jamais utilisé d'objets en C#...
    Voilà un extrait de ma classe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        public class Sprojet
        {
            private int id_projet;
            private string nom_projet;
     
            public ICollection<Sassociation> mesAssoc;
     
            public Sprojet(int id, string nom) 
            {
                this.id_projet = id;
                this.nom_projet = nom;
                this.mesAssoc = new ICollection<Sassociation>;
            }
    Et donc quand j'essaie d'instancier la collection "mesAssoc", ça me dit que je ne peux pas créer une instance de la classe abstraite... et si je ne l'instancie pas, j'ai mon problème décrit plus haut...

  9. #9
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2008
    Messages : 231
    Points : 359
    Points
    359
    Par défaut
    Juste une question, là tu faisait comment pour encapsuler tes données ?

    Je m'explique, si tu n'avais pas une class qui regrouper (encapsulée) toutes les données qui représentent un projet quand tu envoyes tes données, comment veux-tu que ton receveur ça reconstruire un projet ?

    J'illustre :
    Tu as deux projet PJ1 et PJ2.
    PJ1 : Id => 1
    mesAssocs { Assoc1 ; Assoc2 ;etC.}
    PJ2 : Id => 2
    mesAssocs { Assoc 10; Assocs 20 ; etc. }

    Si tu envoyes toutes ces informations sans les encapsuler dans un objet je ne sais pas comment tu vas faire comprendre à ton receveur (client/serveur) quel Asso appartient à quel projet ??

    Et c'est comme ça que tu vas regrouper tout un projet dans un Stream (fichier, flux réseaux, console, etc.)
    "Une belle citation est un diamant au doigt de l'homme d'esprit et un caillou dans la main d'un sot."
    Joseph Roux

  10. #10
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.mesAssoc = new List<Sassociation>();
    on instancie pas une interface

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 50
    Points : 20
    Points
    20
    Par défaut
    Morgand ; justement c'est pour cela que je fais des collections d'objets dans la classe Sprojet, qui contient tous les objets nécessaires pour moi.
    J'ai essayer avec des list<> de ce type mais la sérialisation ne les prend pas en compte, donc j'ai essayer avec des arraylist, et là il ne dit rien VS mais par contre je n'arrive pas à récupérer mes données à la désérialisation (ça me dit que mes collec sont vides). Donc en gros pas possible de sérialiser un objet en "contenant" d'autres, enfin bon c'est l'impasse pour moi là...
    Et pour précision je sérialise et désérialise un projet à chaque fois

  12. #12
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2008
    Messages : 231
    Points : 359
    Points
    359
    Par défaut
    Question bête, es ce que tu as bien tout fait pour que tes class soit Serializable ? et surtout en XML ?
    "Une belle citation est un diamant au doigt de l'homme d'esprit et un caillou dans la main d'un sot."
    Joseph Roux

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 50
    Points : 20
    Points
    20
    Par défaut
    Oui oui toutes mes classes sont déclarées comme cela ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    [Serializable]
        public class Sprojet
        {
    Rien de spécial pour spécifier que c'est du XML mais cela marche en tout cas, ça me sérialise bien ma classe et les collections qu'elle contient dans un fichier soap (avec un système de ref qui se met en place tout seul) donc dans ce sens là à priori ça fonctionne mais je n'arrive pas à désérialiser tout ça...
    Edit : Ça fonctionne! J'avais mal instancié mes arrayList je crois

Discussions similaires

  1. Réponses: 4
    Dernier message: 10/01/2007, 17h50
  2. [C#] Comment sérialiser un objet Font ?
    Par djmanu dans le forum C#
    Réponses: 5
    Dernier message: 20/01/2006, 09h51
  3. [Sérialisation] d'objets de types différents
    Par Amnesiak dans le forum Général Java
    Réponses: 3
    Dernier message: 08/12/2004, 22h28
  4. Requêtes : recherche de maxi sur plusieur Objet
    Par pertuis dans le forum Langage SQL
    Réponses: 6
    Dernier message: 08/03/2004, 15h28
  5. Comment mettre plusieurs objets ds un composant ?
    Par Fleury dans le forum Composants VCL
    Réponses: 7
    Dernier message: 24/05/2003, 17h34

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