这是一笔交易: 我们假设我有一个带有泛型的 类,如下所示:
public class Item<K,V>{
private K key;
private V value;
// some constructors/getters/setters here:
{...}
具体来说,让我们考虑一下这个对象:
Item<String, SomeEnum> someItem = new Item<>("LolString", SomeEnum.SomeEnumValue).
这是默认序列化:
<item>
<key xsi:type="xs:string">LolString</key>
<value xsi:type="someEnum">SomeEnumValue</value>
</item>
我怎样才能代替xsi:type属性创建一个带有节点的树,这些节点具有传递给泛型的类的名称,如下所示:
<item>
<key>
<String>LolString</string>
</key>
<value>
<someEnum>SomeEnumValue</someEnum>
</value>
</item>
答案 0 :(得分:0)
在您的XSD中,通过选择各种元素,使密钥和值成为复杂类型:http://www.w3schools.com/schema/el_choice.asp
答案 1 :(得分:0)
如果您有一组有限的类,则可以使用@XmlElements
注释来指定每个类所需的元素名称。
类似的东西:
@XmlElements(
@XmlElement(name="String", type=String.class),
@XmlElement(name="someEnum", type=SomeEnum.class)
}
但是很难说这对你的Item
课程是否有用。我认为@XmlElements
由于某种原因要求该属性是一个集合,所以你会有类似的东西:
@XmlElements(
@XmlElement(name="String", type=String.class),
@XmlElement(name="someEnum", type=SomeEnum.class)
}
private List<Serializable> key;
这可能不是你真正想要的。
但这是一个纯粹的注释解决方案。