在C#中,如何序列化队列<>? (.Net 2.0)

时间:2008-11-21 20:55:50

标签: c# .net generics serialization .net-2.0

在XmlSerializer构造函数行中,下面会导致InvalidOperationException,它还会抱怨没有为泛型类型实现默认访问者。

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

4 个答案:

答案 0 :(得分:14)

从队列中序列化数据会更容易(也更合适的IMO) - 可能是平面数组或List<T>。由于Queue<T>实现IEnumerable<T>,您应该可以使用:

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

答案 1 :(得分:1)

并非框架的所有部分都是为XML序列化而设计的。您会发现序列化部门也缺少字典。

实现队列非常简单。您可以轻松创建自己的,也可以实现IList,以便它可以序列化。

答案 2 :(得分:0)

如果你想使用内置序列化,你需要按照规则进行播放,这意味着默认ctor,以及你想要序列化的成员的公共get / set属性(并且可能是反序列化) 在您要序列化的数据类型(MyData)

答案 3 :(得分:0)

就我而言,我有一个动态队列,我必须保存并加载该队列的状态。

使用Newtonsoft.Json:

List<dynamic> sampleListOfRecords = new List<dynamic>();
Queue<dynamic> recordQueue = new Queue<dynamic>();
//I add data to queue from a sample list
foreach(dynamic r in sampleListOfRecords)
{
     recordQueue.Enqueue(r);
}

//Serialize
File.WriteAllText("queue.json",
     JsonConvert.SerializeObject(recordQueue.ToList(), Formatting.Indented));
//Deserialize
List<dynamic> data = 
     JsonConvert.DeserializeObject<List<dynamic>>(File.ReadAllText("queue.json"));