XStream和Object类序列化

时间:2012-04-09 11:14:40

标签: java xstream

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

示例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或其他内容。这可能吗?

2 个答案:

答案 0 :(得分:6)

是的,你可以!减少生成的文档的大小是有帮助的。这样做是一种很好的做法 使用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);

答案 1 :(得分:0)

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

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

输出xml:

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