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 :

[Deserialization] Quelles techniques et astuces pour Xml ?


Sujet :

Framework .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 193
    Par défaut [Deserialization] Quelles techniques et astuces pour Xml ?
    Bonjour,
    Lors d'un projet j'avais des XML au format
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      <Commande>
        <NoCommande>1</NoCommande>
      </Commande>
    J'avais crée une classe serializable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Public Class Commande {
    property NoCommande }
    pour la lecture de mon fichier j'utilisais le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    XmlSerializer = New XmlSerializer(GetType(Commande), New Type() {GetType(Commande)})
    Dim fstream As FileStream = New FileStream(path, FileMode.Open, FileAccess.Read, FileShare.None)
    Dim aCommlande As Commlande= aXmlSerializer.Deserialize(fstream)
    Ceci marche très bien.

    Dans un nouveau projet les fichiers xmls sont part contre toujours précédé d'un Header...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <__XmlTransactionl>
      <__Session>
        <FileName>"commande1.xml"</FileName>
        <Timestamp>20080722115935000</Timestamp>
        <Source>SAP</Source>
        <Destination>Labo</Destination>
      </__Session>
      <Commande>
        <NoCommande>1</NoCommande>
      <Commande>
    <__XmlTransactionl>
    A chaque transaction j'ai les même entête <__XmlTransactionl> <__Session> </__Session>, part contre le contenu <Commande>...</Commande>
    La distinctions des objets que je vais recevoir a été fait sur le nom du fichier exemple CommandeXXXX.xml,ArticleXXXX.xml,ClientXXXX.xml

    J'aimerai avoir un moyen simple de recevoir un Objet du type commande,Article en lisant le fichier Xml sans parcourir moi-même le fichier XML avec des XmlNode...

    Pourriez-vous me donner quelques conseilles
    Je ne demande pas tout le code mais des pistes sur les classes et fonctions à utiliser

    Devrais-je créer une class __XmlTransactionlqui peut contenir une List de commande,article,client?

  2. #2
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Par défaut
    Citation Envoyé par BenoitM Voir le message
    Devrais-je créer une class __XmlTransactionl qui peut contenir une List de commande, article, client ?
    A ma connaissance, si tu ne veux pas passer par la lecture Xml, une autre possibilité (et que tu utilises déjà) est effectivement la désérialisation. C'est donc une bonne idée, je ne te frapperai pas ( Cf. ta signature)
    Par contre, tel que tu l'indiques ici, ton objet sera un __XmlTransactionl qui contiendra 1 objet __Session et 1 objet Commande.
    Si l'objet __XmlTransactionl doit contenir plusieurs objets Commande, cela va être différent. A te lire...

  3. #3
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 193
    Par défaut
    Je pense que j'ai le même problème

    j'ai X message qui comprennent :
    - un noyau d'informations similaires
    - des informations spécifiques à chaque fichier

    j'aimerai utilisé la solution
    - créer X classes et un parser capable de me rendre les données lues

    Vu que XmlSerializer se base sur le nom du premier tags pour instanciée un objets de ce type... donc je crois que je suis obliger de créer mon propre parser

    Je pense que celui-ci devrait avoir la possibilité de lire les informations communes et avoir des méthodes permettant de lire les différents type de flux avec un code "générique" surement le même qu'utilise le XmlSerializer.Deserialize...

    Pensez-vous que je suis dans le bon?
    Et auriez-vous des exemples de code qui permettrais de faire ceci?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 156
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <__XmlTransactionl>
      <__Session>
        <FileName>"commande1.xml"</FileName>
        <Timestamp>20080722115935000</Timestamp>
        <Source>SAP</Source>
        <Destination>Labo</Destination>
      </__Session>
      <Commande>
        <NoCommande>1</NoCommande>
      <Commande>
    <__XmlTransactionl>
    Salut as tu essayé de désérialisé avec cet classe tes transactions?(avec le XmlSerializer)

    Une fois la liste d'objet récupéré tu pourrais vérifier leur type avec le mot clef is en C# (il doit exister un équivalent en VB.net)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    [XmlRoot("XmlTransaction")]
    class  XmlTransaction
    {
             public string FileName{get; set;}
             public string Timestamp {get; set;}
             public string Source {get; set;}
             public string Destination {get; set;}
             public List<object> Destination {get; set;}
    }

  5. #5
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 193
    Par défaut
    Merci à vous c'est ce que je désirais

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 25/05/2012, 18h48
  2. [BdD] Gros fichier XML (500mo) => BDD : Quelle technique ?
    Par Masterlud dans le forum XQUERY/SGBD
    Réponses: 10
    Dernier message: 02/05/2007, 13h31
  3. Quelle astuce pour qu'enfin IE m'affiche ca correctement
    Par wiggle dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 04/11/2006, 09h41
  4. Réponses: 6
    Dernier message: 25/07/2006, 15h40

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