使用xstream用数组解析对象

时间:2014-07-26 01:02:06

标签: java arrays json xstream

我一直在使用流进行其他一些其他的休息呼叫,而且一直运行良好。但是我现在有一个带有两个变量的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来执行数组,但是没有将数组嵌入到另一个对象中。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您可以使用addImplicitArray中提供的XStream方法。所以你可以尝试这样:

xstreamReader.alias ("BuildQueue", BuildQueue.class);
xstreamReader.addImplicitArray(BuildQueue.class,"buildQueueItems");
xstreamReader.alias ("buildQueueItems", BuildQueueItem.class);

确保您使用的是XStream版本1.4.7,因为此版本提供了addImplicitArray方法