在C#中,如何序列化队列<>;?(.Net 2.0)
在XmlSerializer构造函数行,下面的命令会导致InvalidOperationException,它还抱怨没有为泛型类型实现默认accesor在C#中,如何序列化队列<>;?(.Net 2.0),c#,.net,generics,serialization,.net-2.0,C#,.net,Generics,Serialization,.net 2.0,在XmlSerializer构造函数行,下面的命令会导致InvalidOperationException,它还抱怨没有为泛型类型实现默认accesor Queue<MyData> myDataQueue = new Queue<MyData>(); // Populate the queue here XmlSerializer mySerializer = new XmlSerializer(myDataQueue.GetType()); Stre
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();
Queue myDataQueue=new Queue();
//在此处填充队列
XmlSerializer mySerializer=
新的XmlSerializer(myDataQueue.GetType());
StreamWriter myWriter=newstreamwriter(“myData.xml”);
序列化(myWriter,myDataQueue);
myWriter.Close();
从队列中序列化数据会更容易(而且更合适),可能是在平面数组或列表中。由于Queue
实现了IEnumerable
,您应该能够使用:
List<T> list = new List<T>(queue);
List List=新列表(队列);
如果要使用内置序列化,则需要按照其规则进行操作,这意味着要序列化(可能是反序列化)的成员的默认构造函数和公共get/set属性
在要序列化的数据类型上(MyData)并非框架的所有部分都是为XML序列化而设计的。你会发现序列化部门也缺少字典
队列实现起来非常简单。您可以轻松创建自己的、也实现了IList的队列,这样它就可以序列化了。在我的例子中,我有一个动态队列,必须保存并加载这个队列的状态
使用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"));
List sampleListOfRecords=new List();
队列记录队列=新队列();
//我从示例列表中将数据添加到队列中
foreach(采样列表记录中的动态r)
{
recordQueue.Enqueue(r);
}
//连载
File.WriteAllText(“queue.json”,
SerializeObject(recordQueue.ToList(),Formatting.Indented));
//反序列化
列表数据=
反序列化对象(File.ReadAllText(“queue.json”);
您也可以使用queue.ToList()我想了解更多关于您所做的“更合适”的注释。@chakrit-仅适用于.NET 3.5,但可以。如果您序列化包含queue的类,这实际上没有帮助。。。除非您愿意忽略队列并确保有一个列表字段保存数据的副本。。。还是有更好的方法?