我正在使用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。
答案 0 :(得分:0)
发布了类似的stackoverflow问题here。
由于Queue实现了IEnumerable,您应该可以使用:
List<T> list = new List<T>(queue);
#likewise
Queue queue = new Queue<T>(list);
反之亦然
否则你也可以使用
queue.ToList()