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

Dotnet Discussion :

Aller plus loin avec la sérialisation XML [Tutoriel]


Sujet :

Dotnet

  1. #1
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut Aller plus loin avec la sérialisation XML
    Cette discussion est consacrée à l'article intitulé Aller plus loin avec la sérialisation XML. Vous pouvez y poster vos commentaires concernant l'article.

    Synopsis :
    Ce tutoriel s'adresse à des personnes maîtrisant déjà la sérialisation XML. Il aborde des concepts plus avancés que le précédent tutoriel et présente quelques astuces permettant de résoudre des problèmes fréquemment rencontrés.

  2. #2
    Membre confirmé
    Avatar de teddyalbina
    Homme Profil pro
    Développeur .Net,C++
    Inscrit en
    Janvier 2008
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .Net,C++

    Informations forums :
    Inscription : Janvier 2008
    Messages : 466
    Points : 568
    Points
    568
    Par défaut
    Très bon article merci
    Viva la viva... en el chorizo de la corida de leon.... (cette phrase n'a aucun sens je sais )

  3. #3
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    La partie concernant sgen m'intéresse. J'ai mis à jour une application en refondant un bloc d'objets métiers. La persistance est faite par sérialisation maintenant. Cela me permet en même temps de "simplifier" l'affichage des informations en passant par une transformation XSL basée sur le XML sérialisé.

    Actuellement, au premier affichage il y a une lenteur. Normal car c'est lié à la génération dynamique de l'assembly pour manipuler les objets sérialisés comme indiqué dans l'article. J'ai donc voulu passer par sgen afin d'améliorer ça. Et j'ai malheureusement une erreur.

    L'erreur est du type
    Les types A.C et B.C utilisent le nom de type XML C à partir de l'espace de nom ''. Utilisez les attributs XML pour spécifier un nom XML unique et/ou un espace de noms pour le type.
    Je n'ai rien trouvé pour le moment à ce sujet. Tu aurais des infos là dessus ?

    L'assembly contient différent objets métiers, tous ne devant pas être sérialisés. Pour le moment ce sont ces derniers qui gênent. La solution serait à priori de séparer en deux assemblies (à moins que l'on puisse marquer un type pour éviter que sgen ne le traite), mais j'aimerais bien comprendre ce qui bloque tout de même.
    Pas de questions techniques par MP

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    A priori c'est parce que tu as 2 types de même nom dans 2 namespaces différents, et que faute de précisions ils seront sérialisés avec le même nom d'élément XML.

    Je suppose qu'en pratique ces 2 types ne sont pas sérialisés dans le même contexte, c'est pourquoi tu n'as pas d'erreur quand l'assembly de sérialisation est généré dynamiquement (parce que l'assembly généré ne prend en compte que les types qui peuvent être rencontrés dans le graphe de l'objet sérialisé).

    Donc je vois 2 solutions :
    - soit tu spécifies à sgen les types que tu veux sérialiser (par défaut il génère du code pour tous les types publics). Sgen n'a malheureusement pas d'option pour exclure un type...
    - soit tu appliques aux classes qui posent problème un attribut XmlType (j'aurais sans doute dû en parler dans le tuto d'ailleurs...) pour spécifier un nom de type XML différent pour les 2 classes :

    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
    namespace A
    {
        [XmlType("A.C")]
        public class C
        {
            ...
        }
    }
     
    namespace B
    {
        [XmlType("B.C")]
        public class C
        {
            ...
        }
    }

  5. #5
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Pour sgen on peut spécifier un type (option /t), mais pas plusieurs à priori.
    Je regarderais avec XmlType si effectivement ça corrige le problème, pour la culture personnelle.

    Au final j'ai mis les classes à sérialiser dans un assembly à part, avec une classe pour gérer la sérialisation des objets dans le contexte. C'est beaucoup plus propre ainsi. Et puis cela oblige à revoir un peu la chose et supprimer des liaisons un peu trop fortes parfois.

    Sinon le code de l'assembly ressemblait à quelque chose comme
    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
    namespace A
    {
        public class B
        {
            public struct D
            {
            }
        }
     
        public class C
        {
            public struct D
            {
            }
        }
    }
    et c'est le type nested (D) qui pose souci. Ce sont des classes générées par un outil, donc ne me demande pas pourquoi une telle chose ^^
    Pas de questions techniques par MP

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par StormimOn Voir le message
    Pour sgen on peut spécifier un type (option /t), mais pas plusieurs à priori.
    Ah oui tiens... il me semblait que c'était possible
    La solution d'un assembly séparé me semble pas mal en effet, d'autant plus que ça facilite la réutilisation

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut Mise à jour de l'article
    Mise à jour

    Une nouvelle section a été ajoutée à l'article :

    Contrôler dynamiquement si un membre doit être sérialisé

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/03/2012, 16h04
  2. Défi : Toutes les semaines un peu de code pour aller plus loin avec Windows 7
    Par Jérôme Lambert dans le forum Développement Windows
    Réponses: 41
    Dernier message: 05/01/2012, 12h00
  3. [RDFa] Pour aller plus loin avec RDFa
    Par dourouc05 dans le forum Web sémantique
    Réponses: 0
    Dernier message: 23/05/2011, 10h12

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