我正在使用生成此类 XML 的系统:
<address>
<addressLine>123 Main Street</addressLine>
<addressLine>Suite 123</addressLine>
<city>Test City</city>
<stateOrProvince>AA</stateOrProvince>
<postalCode>00000</postalCode>
</address>
两个 addressLine 元素应该是 XStream 隐式集合的一部分——我想调用一个getAddressLine()
方法并获得一个List<String>
输出。
我一直在使用 XStream 的教程,但还没有完全弄清楚如何让addressLine
元素正确映射。XStream 的 Tweaking Output 教程中有一个类似的用例,但没有提供示例代码:
另一个用例是集合、数组和映射。如果一个类有一个属于这些类型之一的字段,则默认情况下,它的所有元素都嵌入在表示容器对象本身的元素中。通过使用 、 和 方法配置 XStream,
XStream.addImplicitCollection()
可以XStream.addImplicitArray()
将XStream.addImplicitMap()
元素直接保留为类的子元素,并且省略容器对象的周围标记。甚至可以为一个类声明多个隐式集合、数组或映射,但是这些元素必须是可区分的,以便在反序列化时正确填充不同的容器。在以下示例中,表示农场的 Java 类型可能有两个容器,一个用于猫,一个用于狗:
<farm> <cat>Garfield</cat> <cat>Arlene</cat> <cat>Nermal</cat> <dog>Odie</dog> </farm>
但是,这个SO 答案表明 XStream 场示例是不可能的。
我已尝试使用此 Java 代码对我的 Java 代码进行单元测试,但还没有运气:
XStream xstream = new XStream(new StaxDriver());
xstream.alias("address", Address.class);
xstream.alias("addressLine", String.class);
xstream.addImplicitCollection(Address.class, "addressLines");
Address address = (Address) xstream.fromXML(
new FileInputStream("src/test/resources/addressTest.xml"));
我应该尝试任何其他配置更改吗?
注意:我目前使用的是 XStream v1.2.2。