Java XStream和对象类序列化

Java XStream和对象类序列化,java,xstream,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 ge

我有一些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;
}
public XStream getXStream()
{
XStream XStream=新的XStream();
类[]c={myinterfaceeimpl.Class};//myinterfaceeimpl当然有@XStreamAlias(“MyInterface”)
processAnnotations(c);
别名(MyInterface.class.getSimpleName(),MyInterface.class,MyInterfaceImpl.class);
返回xstream;
}
XML示例:

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


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

是的,你可以!这有助于减少生成文档的大小。这样做是一种很好的做法。
使用方法

这对我有用

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>

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

XStream xstream = new XStream();
xstream.aliasPackage("", "com.example");
输出xml:

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


关于它,我唯一能说的是,当多个包包含具有该名称的类时,没有包名称的
PossibleClass
可能会导致反序列化问题。为此,这可能是不可能的。更新的问题包含XStream初始化。是的,它适用于字符串、整数等,甚至接口,但我有类对象,这似乎会导致问题,因为它可以包含任何类。is“workxstream.alias”(“PossibleClass”,PossibleClass.class);”不起作用?现在它起作用了,我真的不知道问题出在哪里,因为现在它似乎适用于你们的例子。Thanx寻求帮助。请忽略此答案,我发现此攻击不起作用,因为一个别名为空的包会导致另一个包的类出现反序列化问题。
XStream xstream = new XStream();
xstream.aliasPackage("", "com.example");
<myParentClass>
    <childObjectAttribute class="PossibleClass"/>
</myParentClass>