2008-11-21 24 views
8

Tại dòng xây dựng XmlSerializer bên dưới gây ra một InvalidOperationException mà cũng phàn nàn về việc không có một accesor mặc định được thực hiện cho kiểu generic.Trong C#, Làm thế nào tôi có thể tuần tự hóa Hàng đợi <>? (.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(); 

Trả lời

14

Nó sẽ được dễ dàng hơn (và thích hợp hơn IMO) để tuần tự hóa dữ liệu từ hàng đợi - có lẽ trong một mảng phẳng hoặc List<T>. Kể từ Queue<T> thực hiện IEnumerable<T>, bạn sẽ có thể sử dụng:

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

Bạn cũng có thể sử dụng hàng đợi.ToList() – chakrit

+0

Tôi muốn biết thêm về nhận xét "phù hợp hơn" mà bạn đã thực hiện. – CrashCodes

+0

@chakrit - chỉ với .NET 3.5, nhưng có. –

0

nếu bạn muốn sử dụng được xây dựng trong serialization bạn cần phải theo luật chơi của nó, có nghĩa là ctor mặc định, và tài sản get công cộng/bộ cho các thành viên bạn muốn tuần tự hóa (và có lẽ là deserialize) trên kiểu dữ liệu bạn muốn tuần tự hóa (MyData)

1

Không phải tất cả các phần của khung được thiết kế để tuần tự hóa XML. Bạn sẽ thấy rằng các từ điển cũng thiếu trong bộ tuần tự hóa.

Hàng đợi khá tầm thường để triển khai. Bạn có thể dễ dàng tạo ra của riêng bạn mà cũng thực hiện IList để nó sẽ được serializable.

Các vấn đề liên quan