我一直在使用流进行其他一些其他的休息呼叫,而且一直运行良好。但是我现在有一个带有两个变量的Object,其中一个是一个对象数组。
public class BuildQueue
{
public String playerId;
public BuildQueueItem[] buildQueueItems;
}
在BuildQueueItem中我有以下内容......
public class BuildQueueItem
{
public Technology tech;
public long buildNextTurn;
public long techLevel;
public long numberOf;
}
我现在将技术对象留在这里,因为它没有那么远。
这是正在解析的json ......
{
"BuildQueue": {
"buildQueueItems": [
{
"buildNextTurn": 1,
"numberOf": 0,
"tech": {
"price": 100,
"productionUnitsIncreasePerTechLevel": 0,
"uuid": "59697db4-b95b-47a4-b5ba-2d0dd821e243",
"workerUnitsIncreasePerTechLevel": 2
},
"techLevel": 0
},
{
"buildNextTurn": 1,
"numberOf": 1,
"tech": {
"price": 50,
"productionUnitsIncreasePerTechLevel": 0,
"uuid": "dd832f7d-b21b-42c6-9fbe-5d6e4d5f80a0",
"workerUnitsIncreasePerTechLevel": 0
},
"techLevel": 0
}
],
"playerId": "G:917864420"
}
}
这是我用来解析的代码..
xstreamReader.alias ("BuildQueue", BuildQueue.class);
xstreamReader.alias ("BuildQueueItem", BuildQueueItem.class);
BuildQueue queue = (BuildQueue)xstreamReader.fromXML (bodyData);
最后这是错误......
com.thoughtworks.xstream.converters.ConversionException: buildNextTurn : buildNextTurn
---- Debugging information ----
message : buildNextTurn
cause-exception : com.thoughtworks.xstream.mapper.CannotResolveClassException
cause-message : buildNextTurn
class : [Lcom.etepstudios.dataobjects.BuildQueueItem;
required-type : [Lcom.etepstudios.dataobjects.BuildQueueItem;
converter-type : com.thoughtworks.xstream.converters.collections.ArrayConverter
path : /BuildQueue/buildQueueItems/buildNextTurn
line number : -1
class[1] : com.etepstudios.dataobjects.BuildQueue
converter-type[1] : com.thoughtworks.xstream.converters.reflection.ReflectionConverter
version : 1.4.7
-------------------------------
所以它似乎理解它应该是一个BuildQueueItem对象。但由于某种原因,它无法弄清楚buildNextTurn应该是什么类型的类。这实际上是它尝试解析的第一个变量。
我尝试了很多方法,包括使用我发现的使用ArrayList的示例。但这些都没有。
之前我已经能够通过创建json来执行数组,但是没有将数组嵌入到另一个对象中。
有什么想法吗?
答案 0 :(得分:2)
您可以使用addImplicitArray
中提供的XStream
方法。所以你可以尝试这样:
xstreamReader.alias ("BuildQueue", BuildQueue.class);
xstreamReader.addImplicitArray(BuildQueue.class,"buildQueueItems");
xstreamReader.alias ("buildQueueItems", BuildQueueItem.class);
确保您使用的是XStream版本1.4.7,因为此版本提供了addImplicitArray
方法