5

我有 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 或其他内容。那可能吗?

4

2 回答 2

7

是的你可以!它有助于减小生成文档的大小。这样做是个好习惯。
使用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);
于 2012-04-09T12:01:55.227 回答
0

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

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

输出xml:

<myParentClass>
    <childObjectAttribute class="PossibleClass"/>
</myParentClass>
于 2016-03-03T14:06:52.257 回答