【问题标题】:XStream and Object class serializationXStream 和 Object 类序列化
【发布时间】:2012-04-09 11:14:39
【问题描述】:

我的 bean 具有可以包含不同类型的对象。现在,当我创建 XML 时,它会将类属性添加到序列化对象。我想更改它,例如类简单名称。

Java 示例:

public class MyParentClass {

private Object childObjectAttribute; // Can be any instance of any interface ...

// Getters & setters etc..

XStream 初始化:

public XStream getXStream()
{
    XStream xstream = new XStream();
    Class<?>[] c = { MyInterfaceImpl.class }; // MyInterfaceImpl has of course @XStreamAlias("MyInterface")
    xstream.processAnnotations(c);
    xstream.alias(MyInterface.class.getSimpleName(), MyInterface.class, MyInterfaceImpl.class);
    return xstream;
}

示例 XML:

<myParentClass>
    <childObjectAttribute class="com.example.PossibleClass"/>
</myParentClass>

我想将 com.example.PossibleClass 更改为 PossibleClass 或其他内容。这可能吗?

【问题讨论】:

  • 我唯一能说的就是PossibleClass 没有包名,当多个包包含该名称的类时会导致反序列化问题。为此,可能是不可能的。

标签: java xstream


【解决方案1】:

是的,你可以!它有助于减小生成文档的大小。这样做是个好习惯。
使用XStream.alias() 方法。

这对我有用。

PersonX person = new PersonX("Tito", "George");
XStream xstream = new XStream();
xstream.alias("MyPerson", PersonX.class);
String str = xstream.toXML(person);
System.out.println(str);

没有别名

<co.in.test.PersonX>
  <firstName>Tito</firstName>
  <lastName>George</lastName>
</co.in.test.PersonX>

有别名

<MyPerson>
  <firstName>Tito</firstName>
  <lastName>George</lastName>
</MyPerson>

以下方法不起作用吗?

workxstream.alias("PossibleClass", PossibleClass.class);

【讨论】:

  • 更新问题以包含 XStream 初始化。
  • 是的,它适用于字符串、整数等甚至接口,但我有类 Object,这似乎会导致问题,因为它可以包含任何类。
  • 是'workxstream.alias("PossibleClass", PossibleClass.class);'不工作?
  • 现在可以了,我真的不知道是什么问题,因为现在它似乎可以与您的示例一起使用。感谢您的帮助。
【解决方案2】:

是的,如果你想要简单的类名并且你知道对象的包,你可以:

XStream xstream = new XStream();
xstream.aliasPackage("", "com.example");

输出xml:

<myParentClass>
    <childObjectAttribute class="PossibleClass"/>
</myParentClass>

【讨论】:

  • 请忽略这个答案,我发现这个 hack 不起作用,因为 1 个具有空白别名的包会导致另一个包的类出现反序列化问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-16
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
相关资源
最近更新 更多