在XmlSerializer的构造线以下导致一个InvalidOperationException,这也抱怨没有为通用类型实现默认accesor。
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();
会更容易(和更合适的IMO)来序列从队列中的数据 - 也许在一个平面阵列或List<T>
。由于Queue<T>
实现IEnumerable<T>
,你应该能够使用:
List<T> list = new List<T>(queue);
不是框架的所有部分都被设计用于XML序列化。你会发现,词典也缺乏系列化部门。
队列是很容易实现。您可以轻松地创建自己也实现IList因此,这将是序列化。
如果你想使用内置的序列化,你需要通过它的游戏规则,这意味着默认的构造函数,公共的get / set为要序列(大概反序列化)上的数据输入你想要序列化的成员属性(迈德特)
在我来说,我有一个动态队列,我不得不保存和加载这个状态。
使用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"));