在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();
答案 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"));