我的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或其他内容。这可能吗?
答案 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>