在JSON序列化</t> </t>上将Queue <t>属性转换为List <t>

时间:2014-08-14 16:08:41

标签: c# json serialization unity3d json.net

我正在使用JSON.Net(here)lib来进行一些(de /)序列化。但我正在使用的JSON.Net版本(认为它被修改为与Unity3D一起使用 - 在手机上)无法序列化队列,但可以毫无问题地序列化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":[]}

因为它无法读取队列实体。

我想知道如何使用IContractResolver或从DefaultContractResolver继承以在序列化时将Queue转换为List(以便可以正确读取)并在反序列化时将其转回Queue。

1 个答案:

答案 0 :(得分:0)

发布了类似的stackoverflow问题here

由于Queue实现了IEnumerable,您应该可以使用:

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

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

反之亦然

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