cs_bobby3
Messages postés14Date d'inscriptionmardi 24 janvier 2006StatutMembreDernière intervention24 mars 2009
-
23 mars 2009 à 11:18
cs_bobby3
Messages postés14Date d'inscriptionmardi 24 janvier 2006StatutMembreDernière intervention24 mars 2009
-
24 mars 2009 à 13:42
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
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
A voir également:
Serialisation et conservation de reference a une arraylist
cs_bobby3
Messages postés14Date d'inscriptionmardi 24 janvier 2006StatutMembreDernière intervention24 mars 2009 24 mars 2009 à 13:42
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
cs_bobby3
Messages postés14Date d'inscriptionmardi 24 janvier 2006StatutMembreDernière intervention24 mars 2009 23 mars 2009 à 16:41
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
cs_bobby3
Messages postés14Date d'inscriptionmardi 24 janvier 2006StatutMembreDernière intervention24 mars 2009 23 mars 2009 à 17:36
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:
je vais dans ref14 <_items href="#ref-19"/>
<_size>1</_size>
<_version>1</_version>
titeoe
Messages postés433Date d'inscriptionsamedi 26 avril 2003StatutMembreDernière intervention 4 décembre 20091 24 mars 2009 à 10:30
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.
cs_bobby3
Messages postés14Date d'inscriptionmardi 24 janvier 2006StatutMembreDernière intervention24 mars 2009 24 mars 2009 à 10:40
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
<libelle id="ref-21">spe1</libelle>
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);
}
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