Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Tutoriel : La sérialisation XML avec .NET
Par Thomas Levesque

Le , par tomlev

19PARTAGES

0  0 
Cette discussion est consacrée à l'article intitulé La sérialisation XML avec .NET. Vous pouvez y poster vos commentaires concernant l'article.

Synopsis :
Ce tutoriel explique comment sérialiser et désérialiser des objets en XML à l'aide des fonctionnalités du .NET Framework. On verra notamment comment contrôler très finement le schéma des documents XML générés par la sérialisation.

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de zax-tfh
Membre averti https://www.developpez.com
Le 26/02/2009 à 13:02
Excellent tuto !
pdf aussitot enregistré dans mes documents
Merci !
0  0 
Avatar de roster
Membre averti https://www.developpez.com
Le 26/02/2009 à 16:26
Merci bien!
0  0 
Avatar de B.AF
Membre chevronné https://www.developpez.com
Le 01/03/2009 à 17:12
+1 !
0  0 
Avatar de AJemni
Membre actif https://www.developpez.com
Le 01/04/2009 à 19:58
Franchement ce Tuto ma beaucoup aider et il m’a clarifié beaucoup d’ambiguité, mais en contre partie, la gestion d’héritage n’était pas trop claire pour moi.

+1
0  0 
Avatar de tomlev
Rédacteur/Modérateur https://www.developpez.com
Le 02/04/2009 à 0:36
Citation Envoyé par AJemni Voir le message
mais en contre partie, la gestion d’héritage n’était pas trop claire pour moi.
En fait, c'est un problème qui n'est pas forcément évident à comprendre si on ne l'a pas déjà rencontré sur un cas concret... En tous cas, si tu veux des éclaircissements là-dessus, n'hésite pas à demander
0  0 
Avatar de sylvain114d
Membre du Club https://www.developpez.com
Le 06/08/2009 à 16:31
Très bon article.

Une petite remarque cependant à propos de l'attribut Flags sur l'énumération :
Remarquez l'attribut Flags sur l'énumération : il indique que les valeurs peuvent être combinées par un OU binaire (opérateur |). Cet attribut n'est habituellement pas obligatoire, mais il l'est dès lors qu'on veut sérialiser cette énumération en XML. Si l'attribut Flags n'est pas présent, une exception sera levée si on cherche à sérialiser une valeur qui ne fait pas explicitement partie de l'énumération.
J'ai essayé de mettre ou supprimer l'attribut Flags au dessus de mon enum et cela n'a rien changé : j'ai quand même une exception lorsque je sérialise une valeur en dehors de l'enum.
J'ai fait mes tests en .Net 2.0. Peut-être cela est-il différent pour les nouvelles versions mais cela m'étonnerais.
0  0 
Avatar de tomlev
Rédacteur/Modérateur https://www.developpez.com
Le 06/08/2009 à 17:00
Citation Envoyé par sylvain114d Voir le message
J'ai fait mes tests en .Net 2.0. Peut-être cela est-il différent pour les nouvelles versions mais cela m'étonnerais.
Bizarre... peux-tu montrer le code qui pose problème ?
(par contre je pars en WE donc je ne pourrai pas regarder avant dimanche soir)
0  0 
Avatar de sylvain114d
Membre du Club https://www.developpez.com
Le 06/08/2009 à 18:46
J'ai une exception lors de la sérialisation :

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
    [Flags]
    public enum AddressType
    {
        None = 0,
        Ship = 1,
        Bill = 2
    }

    public class Address
    {
        [XmlElement("TypeAdresse")]
        public AddressType Type;
        public string AdrLine1;
    }

    class XMLSerialTest
    {
        public static void Test()
        {
            Address a1 = new Address();
            a1.Type = (AddressType)10;
            a1.AdrLine1 = "Hello World!";

            XmlSerializer xs = new XmlSerializer(typeof(Address));
            using (StreamWriter wr = new StreamWriter("c:\\test.xml"))
            {
                xs.Serialize(wr, a1);
            }
            using (StreamReader rd = new StreamReader("c:\\test.xml"))
            {
                Address a2 = xs.Deserialize(rd) as Address;
                Console.WriteLine("Type : " + a2.Type);
                Console.WriteLine("Line1 : " + a2.AdrLine1);
            }
        }
    }
0  0 
Avatar de tomlev
Rédacteur/Modérateur https://www.developpez.com
Le 10/08/2009 à 0:29
Le problème est ici :

Code : Sélectionner tout
a1.Type = (AddressType)10;
10 n'est pas une valeur valide de AddressType. Ca ne correspond à aucune combinaison de valeurs de AddressType... On peut sérialiser des valeurs qui ne font pas explicitement partie de l'enumération, mais il faut quand même que ce soit une combinaison de valeurs existantes...
0  0 
Avatar de sylvain114d
Membre du Club https://www.developpez.com
Le 10/08/2009 à 12:05
OK merci.
Donc la sérialisation XML d'une enum avec l'attribut Flags fonctionne de façon intuitive et cohérente avec le reste du framework.
Dans ton article j'avais l'impression que l'attribut Flags avait un comportement spécial lors de sérialisation XML.

Les phrases :

Cet attribut n'est habituellement pas obligatoire, mais il l'est dès lors qu'on veut sérialiser cette énumération en XML.
et

Si l'attribut Flags n'est pas présent, une exception sera levée si on cherche à sérialiser une valeur qui ne fait pas explicitement partie de l'énumération.
m'ont induit en erreur.
0  0