2008-11-21 11 views
8

Sur la ligne du constructeur XmlSerializer, la ligne ci-dessous provoque une exception InvalidOperationException qui se plaint également de ne pas avoir un accesseur par défaut implémenté pour le type générique.En C#, comment puis-je sérialiser la file d'attente <>? (.Net 2.0)

Queue<MyData> myDataQueue = new Queue<MyData>(); 

// Populate the queue here 


XmlSerializer mySerializer = 
    new XmlSerializer(myDataQueue.GetType());  

StreamWriter myWriter = new StreamWriter("myData.xml"); 
mySerializer.Serialize(myWriter, myDataQueue); 
myWriter.Close(); 

Répondre

14

Il serait plus facile (et plus approprié OMI) pour sérialiser les données à partir de la file d'attente - peut-être dans une matrice plate ou List<T>. Depuis Queue<T> implémente IEnumerable<T>, vous devriez pouvoir utiliser:

List<T> list = new List<T>(queue); 
+1

Vous pouvez également utiliser queue.ToList() – chakrit

+0

Je voudrais en savoir plus sur le commentaire "plus approprié" que vous avez fait. – CrashCodes

+0

@chakrit - seulement avec .NET 3.5, mais oui. –

0

si vous souhaitez utiliser le construit en sérialisation vous devez jouer par ses règles, ce qui signifie cteur par défaut, et les propriétés get/set publique pour les membres vous souhaitez sérialiser (et probablement désérialiser) sur le type de données que vous souhaitez sérialiser (MyData)

1

Toutes les parties de l'infrastructure ne sont pas conçues pour la sérialisation XML. Vous constaterez que les dictionnaires manquent également dans le service de sérialisation.

Une file d'attente est assez simple à mettre en œuvre. Vous pouvez facilement créer le vôtre qui implémente aussi IList pour qu'il soit sérialisable.