2008-11-21 20 views
8

En la línea del constructor XmlSerializer, a continuación, se produce una InvalidOperationException que también se queja de que no se implementó un acceso predeterminado para el tipo genérico.En C#, ¿cómo puedo serializar Queue <>? (.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(); 

Respuesta

14

Sería más fácil (y más apropiado OMI) para serializar los datos de la cola - tal vez en una matriz plana o List<T>. Desde Queue<T> implementa IEnumerable<T>, usted debería ser capaz de utilizar:

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

También podría usar queue.ToList() – chakrit

+0

Me gustaría obtener más información acerca del comentario "más apropiado" que realizó. – CrashCodes

+0

@chakrit: solo con .NET 3.5, pero sí. –

0

si desea utilizar el construido en la serialización se necesita para jugar por sus reglas, lo que significa ctor por defecto, y las propiedades get pública/set para los miembros desea serializar (y presumiblemente deserializar) en el tipo de datos que desea serializar (MyData)

1

No todas las partes del marco están diseñadas para la serialización de XML. Encontrará que también faltan diccionarios en el departamento de serialización.

Una cola es bastante trivial de implementar. Puede crear fácilmente el suyo que también implemente IList para que sea serializable.

Cuestiones relacionadas