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)
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();
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.
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 :
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.
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