转换Queue< T>属性列表

本文关键字:列表 JSON 属性 序列化 Queue 转换 | 更新日期: 2023-09-27 18:18:06

我使用JSON。Net(这里)库执行一些(反/)序列化。但是JSON的版本。我使用的Net(认为它被修改为与Unity3D一起工作-在手机上)不能序列化Queue,但可以毫无问题地序列化List。

所以下面的类序列化正确(字符串将包含列表项):

public class SomeClassList
{
 List<SomeOtherClass> m_Stuff = new List<SomeOtherClass>();
 public List<SomeOtherClass> Stuff
 {
  get{return m_Stuff;}
 }
}

public class SomeClassQueue
{
 Queue<SomeOtherClass> m_Stuff = new Queue<SomeOtherClass>();
 public Queue<SomeOtherClass> Stuff
 {
  get{return m_Stuff;}
 }
}

的例子:

.
.
.
SomeClassList someClassList = new SomeClassList()
SomeClassQueue someClassQueue = new SomeClassQueue()

这样做:

JsonConvert.SerializeObject(someClassList)

将返回:{"Stuff":[SomeOtherClass, SomeOtherClass, SomeOtherClass]}(其中'SomeOtherClass'实际上是SomeOtherClass的字段和它的数据

这样做:

JsonConvert.SerializeObject(SomeClassQueue)

将返回:

 {"Stuff":[]}

因为它无法读取Queues实体。

我想知道我如何使用IContractResolver或从DefaultContractResolver继承从队列转换到序列化上的列表(以便它可以正确读取),并将其转回反序列化上的队列。

转换Queue< T>属性列表<JSON序列化

这里有一个类似的stackoverflow问题。

由于Queue实现了IEnumerable,你应该能够使用:

List<T> list = new List<T>(queue);
#likewise
Queue queue = new Queue<T>(list); 

,反之

否则你也可以使用
queue.ToList()