在C#,如何可以序列队列<>? (.NET 2.0)

问题描述 投票:8回答:4

在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();
c# .net generics serialization .net-2.0
4个回答
14
投票

会更容易(和更合适的IMO)来序列从队列中的数据 - 也许在一个平面阵列或List<T>。由于Queue<T>实现IEnumerable<T>,你应该能够使用:

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

1
投票

不是框架的所有部分都被设计用于XML序列化。你会发现,词典也缺乏系列化部门。

队列是很容易实现。您可以轻松地创建自己也实现IList因此,这将是序列化。


0
投票

如果你想使用内置的序列化,你需要通过它的游戏规则,这意味着默认的构造函数,公共的get / set为要序列(大概反序列化)上的数据输入你想要序列化的成员属性(迈德特)


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"));
© www.soinside.com 2019 - 2024. All rights reserved.