Précédent   Forum du club des développeurs et IT Pro > Dotnet > Général Dotnet
Général Dotnet Forum dédié aux questions sur le développement .NET en général. Avant de poster -> FAQs .NET, Articles .NET, Sources .NET
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Actualité déjà publiée
 
Outils de la discussion
Publicité
'
Vieux 09/07/2009, 14h30   #1
tomlev
Rédacteur/Modérateur


 
Avatar de tomlev
 
Homme Thomas Levesque
Développeur .NET
Inscription : février 2004
Messages : 17 770
Détails du profil
Informations personnelles :
Nom : Homme Thomas Levesque
Âge : 31
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 : 17 770
Points : 33 990
Points : 33 990
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 :
Citation:
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.
__________________

Pas de questions techniques par MP ! Le forum est là pour ça...

Tutoriels : Les markup extensions en WPF - La sérialisation XML avec .NET (Aller plus loin) - Une visite guidée de WPF (traduction)
Projet : Dvp.NET, la librairie .NET open-source des membres de Developpez !
tomlev est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/07/2009, 13h53   #2
teddyalbina
Membre éprouvé
 
Avatar de teddyalbina
 
Homme
Développeur .Net,C++
Inscription : janvier 2008
Messages : 466
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 27
Localisation : France

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

Informations forums :
Inscription : janvier 2008
Messages : 466
Points : 448
Points : 448
Envoyer un message via MSN à teddyalbina
Très bon article merci
__________________
Viva la viva... en el chorizo de la corida de leon.... (cette phrase n'a aucun sens je sais )
teddyalbina est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2009, 19h36   #3
StormimOn
Expert Confirmé Sénior
 
Avatar de StormimOn
 
Homme David
Développeur informatique
Inscription : mai 2005
Messages : 2 593
Détails du profil
Informations personnelles :
Nom : Homme David
Âge : 35
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 713
Points : 7 713
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
Citation:
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
StormimOn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2009, 00h21   #4
tomlev
Rédacteur/Modérateur


 
Avatar de tomlev
 
Homme Thomas Levesque
Développeur .NET
Inscription : février 2004
Messages : 17 770
Détails du profil
Informations personnelles :
Nom : Homme Thomas Levesque
Âge : 31
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 : 17 770
Points : 33 990
Points : 33 990
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 :
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
    {
        ...
    }
}
__________________

Pas de questions techniques par MP ! Le forum est là pour ça...

Tutoriels : Les markup extensions en WPF - La sérialisation XML avec .NET (Aller plus loin) - Une visite guidée de WPF (traduction)
Projet : Dvp.NET, la librairie .NET open-source des membres de Developpez !
tomlev est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2009, 21h04   #5
StormimOn
Expert Confirmé Sénior
 
Avatar de StormimOn
 
Homme David
Développeur informatique
Inscription : mai 2005
Messages : 2 593
Détails du profil
Informations personnelles :
Nom : Homme David
Âge : 35
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 713
Points : 7 713
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 :
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
StormimOn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2009, 00h33   #6
tomlev
Rédacteur/Modérateur


 
Avatar de tomlev
 
Homme Thomas Levesque
Développeur .NET
Inscription : février 2004
Messages : 17 770
Détails du profil
Informations personnelles :
Nom : Homme Thomas Levesque
Âge : 31
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 : 17 770
Points : 33 990
Points : 33 990
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
__________________

Pas de questions techniques par MP ! Le forum est là pour ça...

Tutoriels : Les markup extensions en WPF - La sérialisation XML avec .NET (Aller plus loin) - Une visite guidée de WPF (traduction)
Projet : Dvp.NET, la librairie .NET open-source des membres de Developpez !
tomlev est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2009, 17h53   #7
tomlev
Rédacteur/Modérateur


 
Avatar de tomlev
 
Homme Thomas Levesque
Développeur .NET
Inscription : février 2004
Messages : 17 770
Détails du profil
Informations personnelles :
Nom : Homme Thomas Levesque
Âge : 31
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 : 17 770
Points : 33 990
Points : 33 990
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é
__________________

Pas de questions techniques par MP ! Le forum est là pour ça...

Tutoriels : Les markup extensions en WPF - La sérialisation XML avec .NET (Aller plus loin) - Une visite guidée de WPF (traduction)
Projet : Dvp.NET, la librairie .NET open-source des membres de Developpez !
tomlev est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Actualité déjà publiée
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 08h52.


 
 
 
 
Partenaires

Hébergement Web