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éclaration d'objet paramétrée


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 32
    Par défaut déclaration d'objet paramétrée
    Bonjour à tous !

    Je commence à développer en C# et je me confronte déjà à pas mal de problèmes :

    J'ai créé une classe sérialisable que voici :
    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
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Runtime.Serialization;
    using System.Xml.Serialization;
    using System.IO;
     
    namespace mysql
    {
        public class connexion:ISerializable
        {
            public string login;
            public string mdp;
            public string serveur;
     
            public connexion(string sLogin, string sMdp, string sServeur)
            {
                login = sLogin;
                mdp = sMdp;
                serveur = sServeur;
            }
            public connexion() : this("","",""){
     
            }
     
            public connexion(string chemin)
            {
                mysql.traitements.chargement.chargeXml(chemin, this);
            }
     
            //public void chargeXML(string chemin)
            //{
            //    if (File.Exists(chemin))
            //    {
            //        XmlSerializer serializer = new XmlSerializer(typeof(connexion));
            //        TextReader reader = new StreamReader(chemin);
            //        connexion maConnexion;
            //        maConnexion = (connexion)serializer.Deserialize(reader);
            //        login = maConnexion.login;
            //        reader.Close();
            //    }
            //}
     
            void ISerializable.GetObjectData(SerializationInfo oInfo, StreamingContext oContext)
            {
                oInfo.AddValue("login", this.login);
                oInfo.AddValue("mdp", this.mdp);
                oInfo.AddValue("serveur", this.serveur);
            }
        }
    }
    Le fais d'avoir une méthode de chargement propre à chacune de mais classe ne me paraissait pas terrible, j'essaye donc de concevoir une fonction générique permettant de charger un objet à partir d'un fichier XML.La fonction "chargeXML" de ma classe connexion fonctionnait j'essaye de la rendre générique à fin de pouvoir charger n'importe quel type d'objet.

    J'ai donc créé une classe chargement que voici :
    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
     
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.IO;
    using System.Xml.Serialization;
    using System.Reflection;
     
    namespace mysql.traitements
    {
        public class chargement
        {
            public static void chargeXml(string chemin, object oObject)
            {
                if (File.Exists(chemin))
                {
                    XmlSerializer serializer = new XmlSerializer(oObject.GetType());
                    TextReader reader = new StreamReader(chemin);
                    object monObjet;
                    monObjet = (object)serializer.Deserialize(reader);
                    // Boucle permettant de charger les attributs de l'objet à partir de l'XML
                    PropertyInfo[] myPropertyInfo, myPropertyInfo2;
                    // Get the properties of 'Type' class object.
                    myPropertyInfo = Type.GetType(monObjet.GetType().ToString()).GetProperties();
                    for (int i = 0; i < myPropertyInfo.Length; i++)
                    {
                        Console.WriteLine(myPropertyInfo[i].ToString());
                        //login = maConnexion.login;
                        //mdp = maConnexion.mdp;
                        //serveur = maConnexion.serveur;
                    }
                    reader.Close();
                }
                //else
                //{
                //    login = "";
                //    mdp = "";
                //    serveur = "";
                //}
            }
        }
    }
    Mes problèmes sont les suivants :

    1 Je ne parviens pas à lister les propriétés de mon objet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myPropertyInfo = Type.GetType(monObjet.GetType().ToString()).GetProperties();
    me retourne un tableau vide !

    2 Je n'ai aucune idée de comment affecter la valeur charger à partir de mon xml à la propriété de mon objet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oObjet.(myPropertyInfo[i].ToString()) =  monObjet.(myPropertyInfo[i].ToString())
    Si vous pouviez m'éclairer un peu ce serait bien sympathique, n'hésitez pas à me donner des conseils sur l'approche du code, comme je l'expliquais je débute et je me doute bien que la lecture de mon code doit piquer les yeux avertis.

    Merci d'avance

    Stéphane

  2. #2
    Membre émérite
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Par défaut
    Si oObject est de type connexion alors c'est normal, ta classe ne contient aucune propriété, il n'y a que des champs publics.

    Fais attention pour la sérialisation d'un mot de passe, il ne faut pas stocker un mot de passe visible mais stocker le résultat crypté du mot de passe.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 32
    Par défaut
    Tout d'abord merci pour ta réactivité !

    Je me suis donc mal exprimé, je cherche à lister les champs publics de mon objet.

  4. #4
    Membre émérite
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Par défaut
    Citation Envoyé par smash Voir le message
    Je me suis donc mal exprimé, je cherche à lister les champs publics de mon objet.
    Ton code liste les propriétés pas les champs c'est pour ça que ça fonctionne pas.

    Encapsule tes champs, les propriétés doivent servir à y accéder.

    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
     
     public class Connexion : ISerializable
        {
            private string login;
            private string mdp;
            private string serveur;
     
            public string Login
            {
                 get {return login;}
            }
     
            public string Serveur
            {
                 get {return serveur; }
            }
     
            public connexion(string sLogin, string sMdp, string sServeur)
            {
                login = sLogin;
                mdp = sMdp;
                serveur = sServeur;
            }
            public connexion() : this("","",""){
     
            }
     
            public connexion(string chemin)
            {
                mysql.traitements.chargement.chargeXml(chemin, this);
            }
     
            //public void chargeXML(string chemin)
            //{
            //    if (File.Exists(chemin))
            //    {
            //        XmlSerializer serializer = new XmlSerializer(typeof(connexion));
            //        TextReader reader = new StreamReader(chemin);
            //        connexion maConnexion;
            //        maConnexion = (connexion)serializer.Deserialize(reader);
            //        login = maConnexion.login;
            //        reader.Close();
            //    }
            //}
     
            void ISerializable.GetObjectData(SerializationInfo oInfo, StreamingContext oContext)
            {
                oInfo.AddValue("login", this.login);
                oInfo.AddValue("mdp", this.mdp);
                oInfo.AddValue("serveur", this.serveur);
            }
        }
    Tu peux utiliser la classe ProtectedMemory pour stocker un mot de passe de manière sécurisée dans la mémoire.

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 32
    Par défaut
    Merci pour ton aide, j'ai un peu avancé :
    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
     
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.IO;
    using System.Xml.Serialization;
    using System.Reflection;
     
    namespace mysql.traitements
    {
        public class chargement
        {
            public static void chargeXml(string chemin, object oObject)
            {
                if (File.Exists(chemin))
                {
                    XmlSerializer serializer = new XmlSerializer(oObject.GetType());
                    TextReader reader = new StreamReader(chemin);
                    object monObjet;
                    monObjet = (object)serializer.Deserialize(reader);
                    // Boucle permettant de charger les attributs de l'objet à partir de l'XML
                    foreach (MemberInfo Mi in monObjet.GetType().GetMembers())
                    {
                        if (Mi.MemberType == MemberTypes.Field)
                        {
                            Console.WriteLine("Champs : {0}", Mi.Name);
                        }
                    }
                    reader.Close();
                }
                //else
                //{
                //    login = "";
                //    mdp = "";
                //    serveur = "";
                //}
            }
        }
    }
    Cela fonctionne, je cherche maintenant à évaluer dynamiquement les noms de mes champs à fin d'y affecter les valeurs du fichier XML. Je pensais faire un truc dans le style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Eval("oObject" + Mi.Name.ToString()) = Eval("monObjet" + Mi.Name.ToString());
    mais bien entendu ça ne fonctionne pas !
    Je suis developpeur Foxpro et je ne parviens pas à trouver l'équivalent de la fonction evaluate.

  6. #6
    Membre émérite
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Par défaut
    Pourquoi tu veux toujours récupérer les champs ?

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

Discussions similaires

  1. Sessions avant ou après déclaration des objets PHP
    Par tchoukapi dans le forum Langage
    Réponses: 2
    Dernier message: 22/08/2008, 23h38
  2. pb de déclaration d'objet dans vba
    Par bbgprog dans le forum Access
    Réponses: 10
    Dernier message: 01/08/2006, 14h03
  3. déclaration de curseur paramétré
    Par new_wave dans le forum Oracle
    Réponses: 3
    Dernier message: 21/11/2005, 14h53
  4. [Convention]déclarations des objets
    Par allstar dans le forum Langage
    Réponses: 4
    Dernier message: 17/11/2005, 00h57
  5. Déclaration d'un paramètre de méthode en final ?
    Par elitost dans le forum Langage
    Réponses: 1
    Dernier message: 22/09/2005, 09h10

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