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 :

Débutant ordre des champs en serialisation XML


Sujet :

C#

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Débutant ordre des champs en serialisation XML
    Bonjour,

    Je sérialise en XML un objet comprenant les champs suivants:
    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
     
    private string m_Directory;
    public string Directory
    {
    	get { return m_Directory;}
    	set { m_Directory = value;}
    }
     
    private string m_Nom;
    public string Nom
    {
    	get { return m_Nom;}
    	set { m_Nom = value;}
    }
     
    public List<string> UsersThatMustReadDSI = new List<string>();
     
    public List<Base_Page> Pages = new List<Base_Page>();
    Au début de mon application, je souhaite trier mes fichiers XML selon la string Directory, pour celà je lis séquentiellement le fichier... Mais Directory se trouve à la fin, c'est ballot.

    Les string "sortent" systématiquement après les List<T>...

    J'ai regardé dans les attributs d'XMLSerializer sans trouver mon bonheur.

    Donc, ma question, est-il possible de forcer la serialisation à commencer par l'élément voulu ?

    Voici le système de sérialisation que j'utilise (je précise que je sais l'utiliser, mais qu'à ce niveau, je ne comprend rien au code) :

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
     
    using System;
    using System.Xml.Serialization;
    using System.IO;
    using System.Collections.Generic;
    using System.Drawing;
    using System.Windows.Forms;
     
    namespace DSI
    {
    	public class XMLSerialize<T> : MarshalByRefObject where T : new()
    	{
    		// Le serialiser est statique ainsi il n'est construit qu'une fois par le CLR
    		// gain de temps enorme qui evite de faire une reflection à chaque utilisation
     
    		static XmlSerializer m_serializer = new XmlSerializer(typeof(T));
    		static public T LoadFromFile(string fileName)
    		{
    			T result;
    			try
    			{
    				using (FileStream input = new FileStream(fileName, FileMode.Open))
    				{
    					result = (T)m_serializer.Deserialize(input);
    				}
    			}
    			catch
    			{
    				result = new T();
    			}
    			return result;
    		}
    		static public T LoadFromString(string data)
    		{
    			T result;
     
    			try
     
    			{
    				using (StringReader sr = new StringReader(data))
    				{
    					result = (T)m_serializer.Deserialize(sr);
    				}
    			}
    			catch
     
    			{
    				result = new T();
    			}
    			return result;
    		}
    		static public T LoadFromStream(Stream stream)
    		{
    			T result;
     
    			try
     
    			{
    				XmlSerializer read = new XmlSerializer(typeof(T));
    				result = (T)m_serializer.Deserialize(stream);
    			}
    			catch
     
    			{
    				result = new T();
    			}
    			return result;
    		}
    		public void SaveToStream(Stream stream)
    		{
    			m_serializer.Serialize(stream, this);
    		}
    		public string SaveToString()
    		{
    			StringWriter sw = new StringWriter();
    			m_serializer.Serialize(sw, this);
    			return sw.ToString();
    		}
    		public void SaveToFile(string fileName)
    		{
    			using (StreamWriter sm = new StreamWriter(fileName))
    			{
    				m_serializer.Serialize(sm, this);
    			}
    		}
    	}
     
    	//Ma classe de serialisation
    	public class XmlDSI : XMLSerialize<XmlDSI>
    	{
    		public XmlDSI()
    		{
     
    		}
     
    		public XmlDSI(DSI_Patient dsi)
    		{
    			DSI = dsi;
    		}
     
    		public DSI_Patient DSI;
    	}
     
    }
    En espérant votre aide, merci ;o)

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par frkdom Voir le message
    Donc, ma question, est-il possible de forcer la serialisation à commencer par l'élément voulu ?
    .Net te permet d'ordonner tes éléments sérialisés dans un fichier mais en passant non pas par XmlSerializer mais par la classe DataContractSerializer.

    Pour que cela marche tu dois décorer ta classe à sérialiser par l'attribut DataContract et les différentes propriétés de ta classe par l'attribut DataMember.

    Pour que tes proprietés suivent un ordre que t'aura défini tu dois jouer sur la propriété Order de leur attribut. Ainsi Order=1 sera la première propriété, Order=2 la deuxième ainsi de suite.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Je dis merci tout de suite, parce que c'est rapide, et ensuite j'essaye ça, ce sera plus long ^^.

    Merci d'avoir pris le temps.

Discussions similaires

  1. [Débutant]Ordre des champs dans une table
    Par goony dans le forum Débuter
    Réponses: 4
    Dernier message: 16/02/2006, 13h05
  2. [débutant] concaténer des champs.
    Par goony dans le forum Langage SQL
    Réponses: 15
    Dernier message: 25/08/2005, 09h28
  3. [débutant] Ordre des champs de saisie par la touche tab
    Par almisuifre dans le forum C++Builder
    Réponses: 10
    Dernier message: 03/03/2005, 20h45
  4. [débutant]Desactiver des champs par rapport a un select
    Par Pymm dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/02/2005, 17h24
  5. Ordre des champs dans une table
    Par patapetz dans le forum Outils
    Réponses: 5
    Dernier message: 30/07/2003, 07h53

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