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 :

C# Sérialisation et hashtable


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de mobscene
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 331
    Par défaut C# Sérialisation et hashtable
    Salut a tous je veux faire un portage d'une de mes applications perl en C# afin d'avoir plus de stabiliter (les threads perl sont pas stable ). J'ai commencé C# il y a un mois , avan de commencer l'applie j'aimerai avoir plus de renseignement sur la sérialisation, en perl quand je fait un ctrl+c avant que mon applie ne ferme elle sauvegarde sur disque divers structures de données hashtable et tableau notamment, puis au prochain lancement les données sont désérialisé puis réinjecté dans les structures en mémoire.

    Je voudrais savoir comment faire cela en C#

    De plus je ne sais pas comment fair cela en C#

    # hash perl
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $foo = {
       clef => {
          sousclef => qqchose,
          souclef2 => qqchose
       }
    };
    merci a tous

  2. #2
    Membre éclairé Avatar de psycho_38
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 55
    Par défaut
    Salut mobscene,

    Le framework .net te propose 2 classe pour la sérilisation
    • SoapFormatter -> formalisme Soap Xml
    • BinaryFormatter
    la classse SoapFormatter se trouve dans l'espace de nom System.Runtime.Serialization.Formatters.Soap

    Exemple de sérialisation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class Controler {
    public static void SaveO(string filename, Object o)
    {
       FileStream fs = new FileStream (filename, FileMode.create)
       SoapFormatter sf = new SoapFormatter();
       sf.Serialize(fs, o)
       fs.Close();
    }
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Employe ROmain = new Employe();
    ROmain.nom = "toto";
    ROmain.Age = 22;
     
    Controler.SaveO("Romain.ser", ROmain)
    La désérialisation d'un objet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public static Object LoadO(string filename) {
    FileStream fs = new FileStream(filename, FileMode.Open);
    SoapFormatter sf = new SoapFormatter();
    Object o = sf.Deserialize(fs);
    fs.Close();
     
    return o;
    }
    Pour récuperer une instance sérialiser de notre classe Employé il faut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Employe ROmain2 = (Employe)Controler.LoadO("Romain.ser");
    Voila j'espere que ca va t'aidé

  3. #3
    Membre éclairé Avatar de mobscene
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 331
    Par défaut
    Merci a tois psycho_38 , mon applie vas utiliser des threads dans mon programme perl afin de passer des données entre les threads j'utilise la class Thread::Queue; je l'initialise ainsi my $Queue = new Thread::Queue; ou $Queue est une référence a un tableau partagé. J'aimerai savoir si une class du meme genre existe en C#

    mici

  4. #4
    Membre éclairé Avatar de psycho_38
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 55
    Par défaut
    L' echange de données entre les thread peut se faire de différentes facon en .net.
    Si tes thread sont dans le même domaine d'application je te conseille d'utiliser un data Slot

    Voivi un 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
    using System;
    using System.Threading;
     
    namespace ConsoleApplication1
    {
        class toto
        {
            static void Main(string[] args)
            {
                string msg = "Hello";
                LocalDataStoreSlot Ltls = Thread.AllocateNamedDataSlot("oDataSlot");
                //Ecriture de la donnée
                Thread.SetData(Ltls, msg);
     
                toto ototo = new toto();
                Thread t = new Thread(new ThreadStart(ototo.DoWork));
                t.Start();
                t.Join();
            }
     
            private void DoWork()
            {
                LocalDataStoreSlot tls = Thread.GetNamedDataSlot("oDataSlot");
                //Lecture de la donnée
                Console.WriteLine((string)Thread.GetData(tls));
            }
        }
    }
    J espere que ca a répondu a ta question

  5. #5
    Membre éclairé Avatar de mobscene
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 331
    Par défaut
    Heu tu entant quoi par domaine d'application tu parle du namespace ?

    Si c'est le cas alors oui

  6. #6
    Membre éclairé Avatar de psycho_38
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 55
    Par défaut
    Non c' est deux chose totalement différent le namespace est en quelque sorte le nom de famille d' une personne
    Je m'explique dans la famille Dupond tous les dupond vont s'appeler par leur prénom, Jean, Paul, Pierre, alors qu'il appeleront un membre de la famille Tournesol Par leur Nom et prénom ex: Tournesol Francois

    Les espaces de noms et les classe c'est la meme chose des classes d' un meme espace de noms peuvent s'appeler directement alor que si une classe veut appelé une classe ne faisant par partie de son espace de nom (famille) il faut que la classe soit préfixé par son ou ses espaces de noms (ex: System.Net.Mail)

    Le domaine d'application (AppDomain en anglais) représente un processus qui s'execute sur un systeme d'exploitation. En sachant que plusieur domaine d'application peuvent cohabiter dans le m^me envirronemnt d'execution. Son but est de séparer les applications afin qu'elle s'execute dans un espace sécurisé.

    Mais je pense que tes threads s'execute dans le mm AppDomain donc utilise la methode que je t'ai donnée

Discussions similaires

  1. Sérialisation d'une Hashtable
    Par dolsky dans le forum VB.NET
    Réponses: 1
    Dernier message: 29/01/2009, 01h18
  2. Compression hashtable, sérialisation et stockage DB
    Par Hammer dans le forum Général Java
    Réponses: 1
    Dernier message: 29/05/2008, 10h52
  3. sérialiser/désérialiser une Hashtable : pb de cast(?)
    Par zouzoute dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 02/02/2008, 15h22
  4. SGBD ou sérialisation
    Par tiboleo dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 07/10/2003, 16h18

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