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

C# Discussion :

Problème de sérialisation XML d'une Array


Sujet :

C#

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 14
    Points : 11
    Points
    11
    Par défaut Problème de sérialisation XML d'une Array
    Bonjour tout le monde,

    Voilà j'ai un petit problème. Je me sers de la sérialisation des classes en XML pour génerer des fichiers XML au format qui me plait. Je dois sérialiser une classe en XML pour qu'elle aie au final le format suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <Forme>
    	<Couleur>Rouge</Couleur>
    	<Type>F1</Type>
    	<Point>1</Point>
    	<Point>2</Point>
    	<Point>3</Point>
    	<Point>4</Point>
    </Forme>
    Le problème, c'est que le nombre de <Point> varie de 0 a l'infini.
    Vous allez me dire : "ok, serialise une Array". Le souci, c'est que ca donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <Forme>
    	<Couleur>Rouge</Couleur>
    	<Type>F1</Type>
    	<Points>
    		<Point>1</Point>
    		<Point>2</Point>
    		<Point>3</Point>
    		<Point>4</Point>
    	<Points>
    </Forme>
    Et moi, je ne peux pas avoir cette balise <Points> qui englobe les <Point> : le schéma du XML est figé et déja utilisé dans d'autres applications, impossible de le modifier...
    Toute mon architecture repose sur de la sérialisation d'objets pour générer des fichiers XML, donc je vous en prie: dites moi qu'il existe une solution !

  2. #2
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Tu dois alors sérialiser ton objet à la mimine, je pense. Tu devras toi-même gérer la sérialisation et désérialisation de ton objet en surchargeant les méthodes idoines.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  3. #3
    Membre éclairé
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Points : 777
    Points
    777
    Par défaut
    <?xml version="1.0" encoding="utf-16"?>
    <Forme xmlnssi="http://www.w3.org/2001/XMLSchema-instance" xmlnssd="http://www.w3.org/2001/XMLSchema">
    <Couleur>rouge</Couleur>
    <Type>F1</Type>
    <Point>1</Point>
    <Point>2</Point>
    <Point>3</Point>
    <Point>4</Point>
    </Forme>
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    public class Forme
    		{
    			private string _couleur;
     
    			public string Couleur
    			{
    				get { return _couleur; }
    				set { _couleur = value; }
    			}
     
    			private string _type;
     
    			public string Type
    			{
    				get { return _type; }
    				set { _type = value; }
    			}
     
     
    			private List<int> _points = new List<int>();
     
    			[XmlElementAttribute("Point")]
    			public List<int> Points
    			{
    				get { return _points; }
    				set { _points = value; }
    			}
     
    		}
    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
     
    Forme forme = new Forme();
    			forme.Couleur = "rouge";
    			forme.Type = "F1";
    			forme.Points.Add(1);
    			forme.Points.Add(2);
    			forme.Points.Add(3);
    			forme.Points.Add(4);
     
     
     
    			XmlSerializer serializer = new XmlSerializer(typeof(Forme));
    			StringBuilder sb = new StringBuilder();
    			XmlWriter writer = XmlTextWriter.Create(sb);
    			serializer.Serialize(writer, forme);
    			System.Diagnostics.Debug.WriteLine(sb.ToString());
    			writer.Flush();
    il faut mettre [XmlElementAttribute("Point")] sur ta liste de points
    Remoting Context Matters
    Everything in this chapter is 100 percent undocumented. Reliance on these techniques is not supported by either Microsoft, the publisher, or the author of this book. Use at you own risk! If your computer won't work afterwards, your toaster blows up or your car doesn't start, I assume no liability whatsoever: You're now about to enter the uncharted territories of .NET and you do so on your own risk. I can only provide some guidance

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    Merci shwin, c'est exactement cet attribut que je cherchais. J'étais en train de m'enfoncer dans les XMLArray et XmlArrayItem...

    En tout cas, merci beaucoup !

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

Discussions similaires

  1. Problème de sérialisation JSON sur une réponse WCF
    Par Mattk dans le forum Services Web
    Réponses: 0
    Dernier message: 29/04/2010, 14h02
  2. Problème de sérialisation XML
    Par loicounet dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 04/09/2009, 09h52
  3. problème de sérialisation xml
    Par Pol63 dans le forum VB.NET
    Réponses: 0
    Dernier message: 26/02/2009, 17h32
  4. Sérialisation XML d'une ArrayList
    Par Contrec dans le forum C#
    Réponses: 6
    Dernier message: 29/11/2008, 09h57
  5. Sérialisation XML d'une famille de classes
    Par darkfrag dans le forum C#
    Réponses: 3
    Dernier message: 09/06/2008, 16h21

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