如何在XStream中动态创建集合中的别名

时间:2015-04-10 16:28:05

标签: xstream

我有一个非常复杂的对象树(基本上是尝试将对象序列化为XML)。对象可以包含相同类型的其他对象等。

无论如何,我在每个类上注释了别名,并且它在某种程度上运行良好。当嵌套级别超过3时,别名将停止工作。

例如,我有

  private List<Object> values = new ArrayList<>();

这包含带注释别名的对象。但他们不再在这里工作了,我得到了通用的班级名称。

如果我注释这样的东西

  @XStreamAlias(value = "value-date", impl = ValueDate.class)
  private List<Object> values = new ArrayList<>();

它有效,但我不能多次使用注释。理想情况下,我会做以下事情:

  @XStreamAlias(value = "value-text", impl = ValueText.class)
  @XStreamAlias(value = "value-boolean", impl = ValueBoolean.class)
  @XStreamAlias(value = "value-date", impl = ValueDate.class)
  private List<Object> values = new ArrayList<>();

我希望像

这样的东西
  <values>
    <value-date>1999-08-31</value-date>
  </values>

但是我得到了

  <values>
    <sql-date>1999-08-31</sql-date>
  </values>

我的班级看起来像这样

@XStreamAlias("value-date")
@XStreamConverter(value = ToAttributedValueConverter.class, strings = { "date" })
public class ValueDate {

  private Date date;

我希望我能说清楚: - )

我刚开始使用XStream,因为JAXB让我发疯; - )

感谢任何提示!

1 个答案:

答案 0 :(得分:0)

好的,我发现错误:我试图将java.sql.Date直接放入我的List而不是将其包装到ValueDate中。

现在一切都按预期工作了。