Sérialiser la classe Queue ??? [Résolu]

EmacLi 165 Messages postés jeudi 3 novembre 2005Date d'inscription 1 février 2013 Dernière intervention - 19 juin 2007 à 10:02 - Dernière réponse : cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention
- 19 juin 2007 à 18:51
Bonjour à tous !

Je voudrais pouvoir sérialiser la collection de type Queue mais je n'y arrive pas !
Quelqu'un peut il m'aider ?

Merci à tous !

(VS2005fr, frk2.0)
Afficher la suite 

Votre réponse

15 réponses

Meilleure réponse
SharpMao 1025 Messages postés mardi 4 février 2003Date d'inscription 7 juin 2010 Dernière intervention - 19 juin 2007 à 15:53
3
Merci
Excuse-moi, j'avais remis
System.Xml.Serialization.XmlSerializerser = newSystem.Xml.Serialization.XmlSerializer(typeof(Queue<string>));

Pour avoir le messafe d'erreur,
il faut bien sûr mettre :
System.Xml.Serialization.XmlSerializerser = newSystem.Xml.Serialization.XmlSerializer(typeof(string[]));

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)

Merci SharpMao 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de SharpMao
cs_niky 168 Messages postés jeudi 28 juin 2001Date d'inscription 18 octobre 2008 Dernière intervention - 19 juin 2007 à 11:11
0
Merci
Salut,

La classe est marquée comme sérialisable, il ne devrait pas y avoir de problème. Il faut juste que les éléments que tu mets dans une queue soient aussi sérialisables :

Queue queue = new Queue();
// ...
FileStream fs = new FileStream(nomDuFichier,
FileMode.create)
SoapFormatter sf = new SoapFormatter(); // Tu peux utiliser un autre formatter
sf.Serialize(fs, queue)
fs.Close();
Commenter la réponse de cs_niky
EmacLi 165 Messages postés jeudi 3 novembre 2005Date d'inscription 1 février 2013 Dernière intervention - 19 juin 2007 à 11:40
0
Merci
Ca ne fonctionne pas, je cherche d'ou ça peut venir.

J'utilise un XmlSerialiser.

J'ai une classe que je sérialise et qui contient une propriété de type Queue<string>.
Commenter la réponse de EmacLi
cs_niky 168 Messages postés jeudi 28 juin 2001Date d'inscription 18 octobre 2008 Dernière intervention - 19 juin 2007 à 11:45
0
Merci
Tu pourrais détailler ce que tu entends par "ça ne fonctionne pas" ?
Tu obtiens une exception à la sérialisation ? à la désérialisation ?
Commenter la réponse de cs_niky
EmacLi 165 Messages postés jeudi 3 novembre 2005Date d'inscription 1 février 2013 Dernière intervention - 19 juin 2007 à 11:50
0
Merci
pour l'instant je ne fait que sérialiser, voici mon erreur :

InvalidOperationException
Une erreur s'est produite lors de la réflexion du type 'TRAV2.Modele'.

Modele étant ma classe.

Merci de ton aide
Commenter la réponse de EmacLi
cs_niky 168 Messages postés jeudi 28 juin 2001Date d'inscription 18 octobre 2008 Dernière intervention - 19 juin 2007 à 11:56
0
Merci
Est-ce que tu sérialises la classe TRAV2.Modele ?
Si c'est le cas, et même si tous ses attributs sont sérialisables, elle doit être marquée sérialisable.
Commenter la réponse de cs_niky
EmacLi 165 Messages postés jeudi 3 novembre 2005Date d'inscription 1 février 2013 Dernière intervention - 19 juin 2007 à 11:59
0
Merci
Oui je la sérialise :

[System.

SerializableAttribute()]
[System.Xml.Serialization.
XmlTypeAttribute(AnonymousType =
true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace "", IsNullable
false)]

public
class
Modele :
IModele
{
Commenter la réponse de EmacLi
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 19 juin 2007 à 12:03
0
Merci
Non, l'attribut Serializable n'est pas indispensable pour les serialization xml avec XmlSerializer

<hr />
-Blog-
Commenter la réponse de cs_Bidou
EmacLi 165 Messages postés jeudi 3 novembre 2005Date d'inscription 1 février 2013 Dernière intervention - 19 juin 2007 à 12:07
0
Merci
Avec ou sans, j'ai toujours la même erreur, je désespère !
Commenter la réponse de EmacLi
EmacLi 165 Messages postés jeudi 3 novembre 2005Date d'inscription 1 février 2013 Dernière intervention - 19 juin 2007 à 14:02
0
Merci
Quelqu'un a t'il déja sérialiser une collection Queue<string> avec un XmlSerialiser ?
Merci d'avance
Commenter la réponse de EmacLi
SharpMao 1025 Messages postés mardi 4 février 2003Date d'inscription 7 juin 2010 Dernière intervention - 19 juin 2007 à 14:28
0
Merci
Hello,

En effet, je viens de tester, et il n'y a pas moyen de sérializer une queue.
Le message d'erreur est le suivant :

You must implement a default accessor on System.Collections.Generic.Queue`1[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] because it inherits from ICollection.

Comme je ne vois pas de moyen d'implémenter ça, j'aurais recours à un petit truc : sérializer/désérializer un tableau :

//Sérialization
Queue<string> q = newQueue<string
>();
q.Enqueue("Test1"
);
q.Enqueue("Test2"
);
q.Enqueue("Test3"
);
using (FileStreamfs = File.OpenWrite(@"c:\temp\testQueue.xml"
))
{
System.Xml.Serialization.XmlSerializerser = newSystem.Xml.Serialization.XmlSerializer(typeof(Queue<string
>));
ser.Serialize(fs, q.ToArray
());
}

//Désérialization
using
(FileStreamfs = File.OpenRead(@"c:\temp\testQueue.xml"
))
{
System.Xml.Serialization.XmlSerializerser = newSystem.Xml.Serialization.XmlSerializer(typeof(string
[]));
q = newQueue<string>((string[])ser.Deserialize(fs
));
}

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Commenter la réponse de SharpMao
EmacLi 165 Messages postés jeudi 3 novembre 2005Date d'inscription 1 février 2013 Dernière intervention - 19 juin 2007 à 15:38
0
Merci
merci beaucoup, je vais voir ce que je peux faire avec !
Commenter la réponse de EmacLi
EmacLi 165 Messages postés jeudi 3 novembre 2005Date d'inscription 1 février 2013 Dernière intervention - 19 juin 2007 à 15:50
0
Merci
Bon je viens de tester, ca plante avec le même message d'erreur que toi :

using

(
FileStream fs =
File.OpenWrite(path))
{

      XmlSerializer ser =
new
XmlSerializer(
typeof(
Queue<
string>)); //erreur
      ser.Serialize(fs, modele.EtapesAnterieur.ToArray());
}

Vous devez implémenter un accesseur par défaut sur System.Collections.Generic.Queue`1[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], car il hérite de ICollection.
Commenter la réponse de EmacLi
EmacLi 165 Messages postés jeudi 3 novembre 2005Date d'inscription 1 février 2013 Dernière intervention - 19 juin 2007 à 16:17
0
Merci
merci
Commenter la réponse de EmacLi
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 19 juin 2007 à 18:51
0
Merci
Oui c'est normal, un Serializer itère dans une collection à la recherche d'élément à Serializer.
Si la collection n'implémente pas ICollection (ou ICollection<T>), le Serializer ne peut pas faire son travail correctement. La class Queue n'implémente pas une telle interface.

Une solution serait donc de dériver de Queue et de faire implémenter cette nouvelle classe de ICollection. Les méthodes Add, Remove appelerais les méthodes Queue et Enqueue...
Puis, Il faut encore implémenter un accesseur,...

Ensuite, on devrait avoir une class Queue qui peut être sérializée, mais avec certains désavantages (comme l'ajout des méthodes Add et Remove en plus de Queue et Enqueue).

Bref, je ne suis pas sûr que cette solution soit très bonne

<hr />
-Blog-
Commenter la réponse de cs_Bidou

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.