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

Framework .NET Discussion :

[Serialisation] Comment faire dynamiquement selon le type ?


Sujet :

Framework .NET

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut [Serialisation] Comment faire dynamiquement selon le type ?
    Bonjour à tous,

    Je développe actuellement une application pour laquelle j’ai besoin d’enregistrer des objets, je me suis donc tout naturellement tourné vers la sérialisation.
    L’utilisation de la sérialisation et de la déserialisation est très simple je vous l’accorde et ne devrais même pas aboutir à un post ici.

    Cependant je me heurte à un problème lors de la déserialisation. Ce problème est plus conceptuel que technique.

    En effet, j’enregistre dans un stream via la sérialisation un nombre indéfini d’objets qui peuvent être de différent type (une vingtaine) chacun ayant un nombre de paramètres et de type de paramètre très différents. De plus il n’y a aucune logique entre le type de l’objet et son ordre dans le stream (seul le type du premier ne change pas).

    Pour désérialiser, on doit créer un objet du type à désérialiser puis désérialiser. Et c’est là que le bat blesse ! Je ne connais pas le type du prochain objet qui va être désérialisé !

    Pour l’instant, les solutions que j’entrevois sont :
    1 - Ouvrir le stream en double, le première pour la déserialisation et le second pour faire des recherche de texte et aller lire le type de l’objet avant de le désérialiser Mais cella me semble un peu boiteu !
    2 – Au moment de la sérialisation, enregistrer le type de l’objet suivant dans l’objet sérialisé. (Le type du premier objet est connu)

    Quelqu’un voit t’il quelque chose de plus élégant et/ou de plus standard ?

    Merci pour les quelques minutes consacrées à la lecture de ce post.

  2. #2
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Bonjour,

    Si j'étais toi, je m'arrangerais pour stocker une collection, contenant une collection par type d'objet à sérialiser. Du coup, quand tu déserialiserais tout ça, tu obtiendrais tes collections originales, en sachant à quel type d'objet chacune d'entre elle correspond.

    C'est la façon dont je le ferais, mais peut-être il y a t-il une façon "standard" ?
    K

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci pour cette réponse.

    Cependant le problème est que l'ordre de sérialisation doit être conservé pour être dépilé (désérialisé) avec le principe FIFO.

    Pour en dire plus, j'ai un treenode et le .tag de chaque noeud pointe vers un de mes objets. Lors de la désérialisation je créé et réorganise le treenode en fonction de l'objet que je récupère.
    En effet, un type d'objet ne peux être que le fils que d'un seul type de père, tant que le fils correspond au père, j'ajoute; si il ne correspond pas, j'ajoute un père, si il ne correspond toujours pas j'ajoute un grand père, et ainsi de suite.....

    Je pourrais gérer dans les objets pères des collections de fils, cependant un père peut avoir des fils de type différents ou pas de fils.

    En fait pour résumer, la sérialisation désérialisation doit non seulement conserver les objets mais aussi leur organisation alors qu'il non pas d'organisation entre eux à part le treenode dont les noeuds pointe sur eux.

    Merci d'avoir fait avancer le schimililmililibildchi... le truc quoi...

  4. #4
    Membre actif Avatar de orelero
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 389
    Points : 274
    Points
    274
    Par défaut
    un truc barbare: p-e que tu peux ,dans plusieurs blocs try/catch, faire des testes sur l'objet désérialisé en le transtypant en toutes les possibilités possible, dés qu'un bloc ne genere pas d'erreur c'est qu'il correspond à tel objet ? je pense que c'est une mauvaise idée mais j'aurai participé

    c'est bete ce que j'ai dit, tu pourrai plutot faire des tests multiples du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     if(o is Voiture){...} else if(o is Velo){...} ainsi de suite.
    Par contre pour les parametres je ne vois pas trop :-o !!
    "L'imagination est plus importante que la connaissance." - Albert Einstein.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par orelero
    c'est bete ce que j'ai dit, tu pourrai plutot faire des tests multiples du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     if(o is Voiture){...} else if(o is Velo){...} ainsi de suite.
    Par contre pour les parametres je ne vois pas trop :-o !!
    Non ce n'était pas bête.

    Par contre faire le test :
    n'est pas possible! Avant la déserialisation o n'est rien et après... et ben après c'est trop tard j'ai besoin de le savoir avant.

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Y'a des jours où l'on doit être très fatigué quand on fait ses essai et que l'on cherche...

    Je viens de trouver la solution, et si j'avais fait cet essai tout bête avant de chercher dans la litterature et sur le web, je n'aurrais pas posté ce post.

    Je donne quand même la solution pour ceux qui ont participé et ceux qui pourrais avoir le même problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    dim o as object                                      'suffit de créer un objet génerique
    dim serializer as soapFormatter
    dim myFileStream as new FileStream(nomdufichier)
     
    o = serializer.deserialize(myFileStream)             'puis de déserialiser dedans
     
     
    myFileStream.close
    Une fois que l'objet est récuperé, on à acces à tous ses paramètre et à son type.

    Pour résumer : Pourquoi chercher simple quand on peut faire compliquer!

  7. #7
    Membre actif Avatar de orelero
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 389
    Points : 274
    Points
    274
    Par défaut
    aie j'avais mal lu le pb !! Maintenant que tu as la soluce je vois ce qui posait pb
    "L'imagination est plus importante que la connaissance." - Albert Einstein.

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    es tu Eric charbonnier pompier a trévouw 01?

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

Discussions similaires

  1. [E-03]Comment faire un diagramme de type Line.
    Par XnaMitch dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/11/2008, 15h39
  2. Comment faire une requête de type spatiale
    Par sohm dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 20/02/2007, 08h50
  3. Comment faire un test de type «StartsWith» ?
    Par Oscar Hiboux dans le forum ANT
    Réponses: 4
    Dernier message: 30/11/2006, 15h11
  4. comment faire un message de type "alert" en java
    Par fracam dans le forum Composants
    Réponses: 4
    Dernier message: 05/12/2005, 17h03
  5. Comment faire un selon en vba
    Par Celia1303 dans le forum Access
    Réponses: 6
    Dernier message: 13/10/2005, 14h31

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