begin process at 2012 02 09 18:19:35
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Algorithme

 > 

Compression, Split et Cryptage

 > 

serialisation et conservation de reference a une arraylist


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

serialisation et conservation de reference a une arraylist

lundi 23 mars 2009 à 11:18:14 | serialisation et conservation de reference a une arraylist

bobby3

Bonjour a tous
J'explique mon probleme
je gère des clients qui ont un certain nombre de specificité
j'ai une classe statique ou sont contenus une arraylist de client et une arraylist de specificité globale
dans client j'ai une arrylist de specificité qui lui sont propre
lorsque je crée un client je lui ajoute des specificité de cette manière
Code :
 
cli=new client()
cli.sesspecificité.add(classe statique.obtenirspecifité(numspecificité)
cli.sesspecificités.add......
 
tant que je suis dans l'application, les specificité contenus dans le client sont bien les memes que celles contenus dans la classe statiques, si je fais
Code :
cli.sesspecificités.remove(classestatique.obtenirspecifité(numspecificité)
//en considérant que la specificité est bien contenus dans le client
cela marche très bien
en revanche si je quitte mon application, je serialise ma liste de client et ma liste de specificité contenus dans la classe statique en SOAP
je relance mon application, je deserialise tout ca dans la classe statique, dans ma classe statique j'ai bien toutes mes données, dans mes clients j'ai bien toute mes specificités, mais lorsque je fait
Code :
cli.sesspecificités.remove(classestatique.obtenirspecifité(numspecificité)
//en considérant que la specificité est bien contenus dans le client
cela ne marche pas, comme si que la specificité a enlever était une nouvelle spécificité
Une seule explication a cela, je pense que lors de la sérialisation ou la serialisation, il me créé des spécificité dans la liste de specificité des clients plutot que de faire références aux spécificités contenus dans la classe statique
je ne sait absolument pas comment résoudre ce probleme, merci d'avance pour vos réponses
lundi 23 mars 2009 à 16:25:11 | Re : serialisation et conservation de reference a une arraylist

titeoe

bonjour,

quand tu sérialise ton objet client, as tu regardé si dans le Xml les spécificités sont bien indiquées ?

question, tu sérialises en SOAP, qu'entends tu par la ?
lundi 23 mars 2009 à 16:41:06 | Re : serialisation et conservation de reference a une arraylist

bobby3

oui dans le fichier client les spécificité sont bien indiqués, le probleme est lors de la deserialisation j'ai l'impression qu'au lien des remplir les liste de specificité d'un client a partir des specificité globales contenus dans la classe statique il me fait un new specificité()
dés lors lorsque je veux faire un remove des specificités d'un client a partir d'une specificité globale il me le trouve pas
sinon pour le SOAP il y a 3 types de serialisation: SOAP, xml et binaire, moi j'ai choisi la serialisation SOAP( qui serialise aussi en XML mais n'oblige pas à déclarer les champs en publics)
J'ai passé la journée dessus j'y comprend absolument rien
lundi 23 mars 2009 à 17:36:09 | Re : serialisation et conservation de reference a une arraylist

bobby3

un petit up car j'ai du nouveau
Il semblerait que lors de la serialisation ou de la deserialisation les références ne soit pas gardés
j'ai parcouru les fichiers xml de long en large et j'ai remarqué que les dépendances ne sont pas gardés lorsque je serialise
dans acteurs:

<acteur_x002B_ListSpe href="#ref-14"/>

je vais dans ref14

<a1:ArrayList id="ref-14" xmlns:a1="http://schemas.microsoft.com/clr/ns/System.Collections">
<_items href="#ref-19"/>
<_size>1</_size>
<_version>1</_version>
</a1:ArrayList>

je vais dans ref19

<SOAP-ENC:Array id="ref-19" SOAP-ENC:arrayType="xsd:anyType[4]">
<item href="#ref-20"/>*

je vais dans ref20

<a3:spécificité id="ref-20" xmlns:a3="http://schemas.microsoft.com/clr/nsassem/GestaCom.classe/GestaCom%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3Dnull">
<libelle id="ref-21">spe1</libelle>
</a3:spécificité>

et la j'apercoit une nouvelle specificité, alors que la reference devrait etre vers le fichier specificité
dans specificité
<a3:spécificité id="ref-3" xmlns:a3="http://schemas.microsoft.com/clr/nsassem/GestaCom.classe/GestaCom%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3Dnull">
<libelle id="ref-6">spe1</libelle>
</a3:spécificité>

pourtant dans le code tant que je ne quitte pas mes specificité sont bien issus de la collection de specificité contenus dans modele

Si certains ont des idées je suis preneur car je ne sait plus quoi faire
mardi 24 mars 2009 à 10:30:22 | Re : serialisation et conservation de reference a une arraylist

titeoe

hmmm

Je ne suis pas expert en soap mais je pense qu'il faut que tes propriétés soient bien présentes dans ton XML avant d'aller + loin.

As tu regardé la maniere dont les spécificités sont sérialisées ?
Autre chose , si vraiment tu galères un peu, tu peux écrire du code dans la méthode OnDeserialize qui te permettra d'initier tes spécificités après désérialisation.
mardi 24 mars 2009 à 10:40:46 | Re : serialisation et conservation de reference a une arraylist

bobby3

au  niveau du xml les données son bien présentes
le problème est que, pour simplifier, au lieu que dans le xml acteurs ils mettent "va me chercher la specificité dans la collection de specificité", il me créé une spécificité, comme je l'ai marqué au dessus
<a3:spécificité id="ref-20" xmlns:a3="http://schemas.microsoft.com/clr/nsassem/GestaCom.classe/GestaCom%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3Dnull">
<libelle id="ref-21">spe1</libelle>
</a3:spécificité>
après ca c'est peut être normal je ne sait pas je ne suis pas expert non plus en SOAP
je te monte aussi la anière dont je serialise deserialise peut-etre que ca pourrait t'aider
au lancement de l'appli
//on charge les données
            modele.ListSpe_set_get = modele.deserialiser(modele.ListSpe_set_get, "specificite");
            modele.ListProduit_set_get = modele.deserialiser(modele.ListProduit_set_get, "produit");
            modele.ListActeur1_set_get=modele.deserialiser(modele.ListActeur1_set_get, "acteur");
            modele.ModeDePasse_set_get = modele.deserialiser(modele.ModeDePasse_set_get, "MDP");
            modele.ListRaccourci_set_get = modele.deserialiser(modele.ListRaccourci_set_get, "raccourci");

a la fermeture de l'appli
modele.serialiser(modele.ListSpe_set_get, "specificite");
            modele.serialiser(modele.ListProduit_set_get, "produit");
            modele.serialiser(modele.ListActeur1_set_get,"acteur");
            modele.serialiser(modele.ModeDePasse_set_get, "MDP");
            modele.serialiser(modele.ListRaccourci_set_get, "raccourci");
            Application.Exit();

méthode dans la classe statique
        public static void serialiser(ArrayList col, string nom)//sauvegarde des données
        {
            string fichier = Application.StartupPath + "\\donnée\\" + nom;
            FileStream fs = null;
            try
            {
                fs = File.Open(fichier, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);
                SoapFormatter bf = new SoapFormatter();
                {
                    bf.Serialize(fs, col);

                }
                fs.Close();
                }
                catch (Exception)
                {
                    MessageBox.Show("pbs sauvegarde donnée " + nom);
                }
        }

        public static ArrayList deserialiser(ArrayList col, string nom)
        {
            string fichier = Application.StartupPath + "\\donnée\\" + nom;
            FileStream fs = null;
            try
            {
                fs = File.Open(fichier, FileMode.Open, FileAccess.Read, FileShare.None);
                SoapFormatter bf = new SoapFormatter();
                col = ((System.Collections.ArrayList)bf.Deserialize(fs));
                fs.Close();
                return (col);

            }
            catch (Exception)
            {
                MessageBox.Show("problème lecture des données "+nom);
                try { fs.Close(); }
                catch { };//au cas ou sa ne se serait pas fermé
                return (new ArrayList());
            }
        }

voila dit moi ce que t'en pense, peut-etre faut'il serialiser les données "en même temps"
Sinon comme tu le voit pour la serialisation et le deserialisation c'est C# qui s'occupe de tout donc je ne peut pas trop intervenir ou modifier le processus

mardi 24 mars 2009 à 13:42:51 | Re : serialisation et conservation de reference a une arraylist

bobby3

Réponse acceptée !
bon bas je me suis résolu le problème tout seul


d'après moi le problème est que les spécificités d'un acteur ne pouvait pas référence à la liste de spécificité car cette liste n'était pas sérialisé dans le même fichier , je pense qu'il n'avait aucun moyen de dire que la référence provenait d'un autre fichier
pour remédier à cela au lieu de sérialiser chaque collection dans un fichier différent j'ai créé une collection contenant toutes les autres collection, et cette collection globale, de ce fait les spécificité d'un acteur pointait bien vers les spécificités globales contenus dans le même fichier (#réf)

Voila en ésperant que ce post aidera des personnes qui un jour se retrouveront avec le même problème que moi, c'est d'ailleurs étonnant que je n'ai rien trouvé à ce sujet sur internet


Cette discussion est classée dans : client, classe, statique, contenus, specificité


Répondre à ce message

Sujets en rapport avec ce message

.Net Remoting [ par CrazyCodeur ] Bonjour ! Je fais une petite appli win en c# utilisant le .NET Remoting et j'ai un petit soucis. Tout fonctionne correctemnt si j'appelle les méthodes classes imbriquées [ par mathmax ] Bonjour,Pouvez-vous m'aider sur ce problème de classes immbriquées :J'ai une classe 2 imbriquée dans une classe 1. Mes 2 classes ne sont pas statique. Accès au control d'un formulaire d'une class statique [ par ericmartinebalou ] Bonjour,J'ai programmé une méthode dans une classe statique qui effectue des opérations. J'aimerais depuis cette méthode atteindre un controle d'un fo Web Service Silverlight [ par bamb0u ] Bonjour,J'ai créer un webservice contenant une fonction qui va rechercher des informations dans une base de données. Ces informations sont ensuite sto [c#] référence d'un service web client à une classe proxy [ par Verrisan ] Bonjour tout le monde,J'ai généré avec l'utilitaire wsdl.exe de Visual Studio 2005 une classe proxy.cs à partir d'un fichier wsdl que l'on m'a fourni. consommation d'un webservice(JAX) retournant un object complexe!! [ par yayasam ] bonjour et merci d'avance pour tous ceux qui vont consacré un petit moment à mon post. je travaille sur un projet client-serveur, tel que le serveur f Problème "ServiceHelper" [ par SushiBalboha ] Bonjour à tous et à toutes. Je suis tout nouveau sur ce site, mais j'ai vu que beaucoup de personnes s'y connaissent pas mal, c'est pour cela que je classe détectant les logiciels installés [ par ITI2010 ] Pourriez vous me filer le nom de la classe .framework (c#) qui liste les différents logiciels installés sur un poste. Merci d'avance[^^clinoeil1] MAJ d'une base de donnée depuis XML [ par ValorX ] Bonjour, J'essaie de mettre à jour une base de donné depuis un fichier xml, le problème est que le dataset est mit à jours mais pas la base de donnée


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 5,304 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales