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 :

Stocker une liste d'objets personnalisés dans les settings


Sujet :

Dotnet

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2005
    Messages : 98
    Points : 60
    Points
    60
    Par défaut Stocker une liste d'objets personnalisés dans les settings
    Bonjour,

    Après plusieurs essais infructueux et une recherche ayant donné hélas le même résultat je viens à vous pour le cas où vous auriez une idée.

    Mon problème est que je génère une IList<objetPerso> que je veux sauvegarder dans les settings (pas dans un fichier xml).
    le soucis est que, si je sauvegarde un Guid, string, int, etc dans un arraylist d'une variable du settings, cela fonctionne, il me le sauvegarde bien quand je fais un Properties.Settings.Default.Save(), mais dès que je veux lui mettre une liste d'objets (même un objet Personne avec deux champs nom et prénom par exemple), ca ne fonctionne hélas pas.

    Il n'y a pas besoin de code puisque c'est une question d'ordre général sur la possibilité ou non de sauvegarder des objets dans le fichiers de Settings.

    Merci d'avance pour ceux qui auraient un début de réponse car là je sèche

  2. #2
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 254
    Points
    28 254
    Par défaut
    Settings a une extension settings mais n'est ce pas pour autant de l'XML? il me semblait que Microsoft aimait tout stocker dans ce format.

    toi, ce que tu veux faire, c'est de la serialisation XML,ou alors, tu veux stocker une structure "vide" d'une classe?

  3. #3
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par laville Voir le message
    Bonjour,

    Après plusieurs essais infructueux et une recherche ayant donné hélas le même résultat je viens à vous pour le cas où vous auriez une idée.

    Mon problème est que je génère une IList<objetPerso> que je veux sauvegarder dans les settings (pas dans un fichier xml).

    Les settings sont des fichiers xml

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2005
    Messages : 98
    Points : 60
    Points
    60
    Par défaut
    Oui, excusez moi, il est vrai que le fichier de settings est un fichier xml, je me suis mal exprimé.

    Comme le dis Louis Guillaume, je pourrais faire facilement de la sérialisation/désérialisation dans un fichier xml "quelconque" (ce que je ne veux pas).

    Ce que je voudrais c'est faire cela mais dans le fichier de settings. Il me semble pouvoir définir un format via l'app.config, mais le responsable du projet n'en veut pas trop (j'ai vu un tutoriel là dessus permettant de stocker des objets ou listes d'objets via l'app.config qui lui aussi se sert des settings).

    Est-ce donc faisable ou dois-je proposer finalement l'une des deux possibilités cités qui ne sont pour el moment pas retenues ?

    Merci encore de votre aide

  5. #5
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Le plus simple est de te faire un XmlSerializer personnalisé qui va aller tapper dans les Settings, je pense.

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2005
    Messages : 98
    Points : 60
    Points
    60
    Par défaut
    Le problème n'est pas réellement la lecture, si les données y étaient déja je pourrais les lire ^^ après la méthode serait bien évidemment la sérialization ou une récupération personnalisée.

    Mon majeur soucis est de les mettre dans les settings .

    Pour les mettre, il faut les insérer en tant que liste d'objets, et pour cela, vu que l'arrayList ne permet pas cela, que faire ?

    Voila la réelle question ^^

  7. #7
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Pourquoi tu tiens à stocker ta liste d'objet perso dans les settings ? Tu pourrais aussi bien mettre ca dans un simple fichier XML via un XmlSerializer...

  8. #8
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 254
    Points
    28 254
    Par défaut
    Citation Envoyé par Thomas Lebrun Voir le message
    Pourquoi tu tiens à stocker ta liste d'objet perso dans les settings ? Tu pourrais aussi bien mettre ca dans un simple fichier XML via un XmlSerializer...
    à cause de son chef et de ses principes, qui veut des choses sans savoir si c'est possible ou non

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Points : 627
    Points
    627
    Par défaut
    Salut,

    comme au dessus, AMHA, il est plus judicieux de stocker ca dans un fichier xml different, mais vu qu'apparement ca ne depend pas de toi. =)

    En fait, pour stocker une List<Truc>, tu dois créer une class encapsulant cette List, avec un get/set public, apres ca marche comme de la serialisation XML standard (limitation avec les class encapsulant des collections, tout le graphe doit etre serialisable etc ). Par exemple :

    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
        static class Program
        {
            static void Main()
            {
                StockageClass sc = new StockageClass();
                List<Class> ls = new List<Class>();
     
                Class c = new Class();
                c.Test = "Test";
                c.Test1 = DateTime.Now;
     
                ls.Add(c);
     
                c = new Class();
                c.Test = "Test1";
                c.Test1 = DateTime.Now;
     
                ls.Add(c);
     
                sc.List = ls;
     
                Properties.Settings.Default.Setting = sc;
                Properties.Settings.Default.Save();
            }
        }
     
     
        public class StockageClass
        {
            List<Class> m_list;
            [XmlArrayItem(ElementName="MaClass", Type = typeof(Class))]
            public List<Class> List
            {
                get { return m_list; }
                set { m_list = value; }
            }
     
        }
     
        public class Class
        {
            string m_test;
            public string Test { get { return m_test; } set { m_test = value; } }
            DateTime m_test1;
            public DateTime Test1 { get { return m_test1; } set { m_test1 = value; } }
        }
    Resultat :

    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
                <setting name="Setting" serializeAs="Xml">
                    <value>
                        <StockageClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                            xmlns:xsd="http://www.w3.org/2001/XMLSchema">
                            <List>
                                <MaClass>
                                    <Test>Test</Test>
                                    <Test1>2007-12-13T02:41:34.21475+01:00</Test1>
                                </MaClass>
                                <MaClass>
                                    <Test>Test1</Test>
                                    <Test1>2007-12-13T02:41:34.21475+01:00</Test1>
                                </MaClass>
                            </List>
                        </StockageClass>
                    </value>
                </setting>
    Bon courage.

  10. #10
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2005
    Messages : 98
    Points : 60
    Points
    60
    Par défaut
    Merci à tous de vos réponses, et effectivement, ce n'est point moi qui décide

    merci SirJulio pour ta réponse, c'est ce que j'ai pensé et qu'un ami m'a confirmé sans être à 100% certain que cela fonctionnerait tout de même.

    Je test cela et je clos si besoin.

    Merci encore de votre aide

  11. #11
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2005
    Messages : 98
    Points : 60
    Points
    60
    Par défaut
    là je sèche complètement.

    Pour ce qui est de la sérialisation, cela fonctionne si je met en paramètre List<objet>.

    Mais le soucis maintenant c'est que cet objet contient lui même une liste d'un autre objet, et la sérialisation ne le prend pas en compte :s

    public class MonObjet1
    {

    List<monObj2> lis;


    public List<monObj2> list
    {
    get{}
    set{}
    }
    }

    public class MonObjet2
    {
    private List<Obj3> obj;

    }


    en gros, la liste d'obj3 n'est pas sérialisée. Il me met le nombre de tags correspondant au nombre d'éléments dans la liste, mais il ne me met pas l'objet sérialisé

    Quelqu'un aurait une petite idée ?

    merci encore.

    PS : pour la sérialisation dans les settings j'ai fait cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                System.Xml.Serialization.XmlSerializer oXmlSerializer = null;
                oXmlSerializer = new System.Xml.Serialization.XmlSerializer(typeof(List<Layer>));
                UnicodeEncoding uniEncoding = new UnicodeEncoding();
                MemoryStream stream = new MemoryStream();
                oXmlSerializer.Serialize(stream, this.ucLayersList1.LayerList.LayersList);
                byte[] buffer;
                buffer = stream.ToArray();
     
                string str = System.Text.Encoding.Default.GetString(buffer);
    Après plus qu'à mettre la chaine de string dans les settings et de la récupérer et la désérialiser ^^


    EDIT : j'ai trouvé....

    Quand on sérialise, il est obligatoire de mettre les Accesseurs en get/set et pas seulement en get... (logique en un sens).

    Bref pour bien sérialiser : accesseurs en get/set, balises optionnelles, faire comme ci-dessus pour sérialiser, et pour désérialiser, faire comme d'habitude.

    Merci en tout cas pour votre aide , je clos.

  12. #12
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Pilote ta sérialisation plus finement via les attributs de sérialisation Xml sur les propriétés.

    Par ailleurs, la sérialisation Xml ne fonctionne que sur des propriétés publiques en lecture/écriture (et sur les variables membres public non readonly aussi, si tu as ce genre d'énormité )

  13. #13
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2005
    Messages : 98
    Points : 60
    Points
    60
    Par défaut
    Effectivement j'ai eu ce genre d'énormité :!

    J'avais pas vu ta réponse ^^

    Merci encore

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/06/2015, 14h41
  2. [Admin] [XIR2] Liste des objets utilsés dans les rapports
    Par cyril56 dans le forum Administration-Migration
    Réponses: 3
    Dernier message: 06/04/2009, 15h32
  3. Réponses: 2
    Dernier message: 21/05/2007, 20h43
  4. Enregistrement d'objet persos dans les settings
    Par skylvl dans le forum VB.NET
    Réponses: 1
    Dernier message: 07/03/2007, 14h32
  5. Créer une liste d'objets statiques dans une classe
    Par crossbowman dans le forum C++
    Réponses: 3
    Dernier message: 13/03/2006, 09h11

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