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 :

Conversion Object (contenu dynamique) vers Object[]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti

    Homme Profil pro
    Full Stack Web Developer
    Inscrit en
    Avril 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Full Stack Web Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 38
    Billets dans le blog
    2
    Par défaut Conversion Object (contenu dynamique) vers Object[]
    Bonjour,

    Habituellement je trouve aisément les solutions à mes problèmes en surfant sur le web et sur développez.com mais sur ce coup je me retrouve bloqué.

    Je souhaite parser le fichier "sessionstore.js" créé par Firefox, sérialisé en JSON afin d'en tirer les onglets actuellement ouvert. (Le fichier se situe dans : c:\Users\<username>\App.data\roaming\Mozilla\Firefox\Profiles\<profile>\sessionstore.js)

    Voici ce que j'ai pour le moment:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    System.Web.Script.Serialization.JavaScriptSerializer _srl = new System.Web.Script.Serialization.JavaScriptSerializer();
    Object _obj = _srl.DeserializeObject(File.ReadAllText(@"C:\Users\Nicolas.LEALTEC\AppData\Roaming\Mozilla\Firefox\Profiles\0iy9wkxl.default\sessionstore.js"));
    List<Object[]> _lstObj = new List<object[]>();
    _lstObj = _srl.ConvertToType<List<Object[]>>(_obj);
    Ma variable _obj s'intialise correctement, je peux le voir en debug comme démontré ci-dessous:

    Mais _lstObj n'existe pas dans le contexte, comme s'il outrepassé l'instruction sans généré d'erreur.

    Le problème est que je souhaiterais récupérer la valeur de _obj dans un List<object[]> ou autre variable qui me permettrait d'accéder aux données parsées comme en utilisant un "simple" tableau multi-dimensionnel.

    La difficulté est que ce fichier sessionstore.js peut générer un nombre d'enregistrement variable ainsi qu'une multi-dimension variable.

    La condition que je doit respectée est .NET Framework 3.5

    Je vous remercie d'avance pour l'aide que vous pourriez m'apporter

    Env. de dév.: Win7 x64 / VS 2008 / .NET 3.5

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    A vue de nez c'est un Dictionary<String,Object[]>

    Ca donne quoi de faire ca:

  3. #3
    Membre averti

    Homme Profil pro
    Full Stack Web Developer
    Inscrit en
    Avril 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Full Stack Web Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 38
    Billets dans le blog
    2
    Par défaut
    Merci Nathanael,

    Effectivement, c'est un System.Collections.Generic.Dictionary`2[System.String,System.Object]

    Je ne me suis encore jamais servi d'un Dictionary.

    La question est de savoir comment le parcourir. Je pourrais y aller avec des foreach imbriqués, mais ça risque d'être un peu long et fastidieux, Y'a t'il une fonction permettant le parcours récursif de ce type de tableau ? Sachant que je peux connaître les dimensions auxquelles je dois me rendre.

    En glanant sur le web, j'ai trouvé beaucoup d'exemple uni-dimensionnel mais peu relatant la multi-dimension et difficilement expliqué.

    Voici le script de test que j'ai en mode console:
    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
            public static void Main(string[] args)
            {
                System.Web.Script.Serialization.JavaScriptSerializer _srl = new System.Web.Script.Serialization.JavaScriptSerializer();
                Object _obj = _srl.DeserializeObject(File.ReadAllText(@"C:\Users\Nicolas.LEALTEC\AppData\Roaming\Mozilla\Firefox\Profiles\0iy9wkxl.default\sessionstore.js"));
                System.Collections.Generic.Dictionary<String, Object> _dico = (System.Collections.Generic.Dictionary<String, Object>)_obj;
                foreach (KeyValuePair<String, Object> pairs in _dico)
                {
                    Console.WriteLine("{0} : {1}", pairs.Key, pairs.Value.ToString());
                    if(pairs.Key == "windows" && "System.Object[]" == pairs.Value.ToString())
                    {
                        Object[] _arObj = (Object[])pairs.Value;
                        foreach (var test in _arObj)
                        {
                            Console.WriteLine("\t{0}", test.ToString());
                        }
                    }
                }
     
                Console.Read();
          }
    Output :
    windows : System.Object[]
    System.Collections.Generic.Dictionary`2[System.String, System.Object]
    selectedWindow : 1
    _closedWindows : System.Object[]
    session : System.Collections.Generic.Dictionary`2[System.String, System.Object]

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 62
    Par défaut
    Je crois que c'est un Dictionnary<String, List<Dictionnary<String, String>>> ^^. Après, je ne suis pas sûr !

  5. #5
    Membre averti

    Homme Profil pro
    Full Stack Web Developer
    Inscrit en
    Avril 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Full Stack Web Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 38
    Billets dans le blog
    2
    Par défaut
    Merci hussein47,

    Ce que je cherche surtout à savoir c'est comment parcourir récursivement ce tableau afin d'en traiter les données sous-jacentes?

    Salutations.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 62
    Par défaut
    Essaye de le cast ton _obj en List<Dictionary<String, List<Dictionary<String, List<Dictionary<String, List<Dictionary<String, String>>>>>>>>(), si ca fonctionne on poura le traiter facilement.

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

Discussions similaires

  1. problème de conversion de dimension dans BUSINESS OBJECT
    Par greatmaster1971 dans le forum Deski
    Réponses: 4
    Dernier message: 28/04/2014, 13h15
  2. Problème de conversion de java.util.Date Object to a java.sql.Date Object
    Par amine1980 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 02/12/2011, 11h18
  3. De applet vers object
    Par Tan Phi dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 23/06/2011, 14h14
  4. Réponses: 5
    Dernier message: 05/02/2007, 15h04
  5. Réponses: 3
    Dernier message: 13/07/2006, 15h48

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