Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#中,如何序列化队列<>;?(.Net 2.0)_C#_.net_Generics_Serialization_.net 2.0 - Fatal编程技术网

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

在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

在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();
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的类,这实际上没有帮助。。。除非您愿意忽略队列并确保有一个列表字段保存数据的副本。。。还是有更好的方法?