java XStream:NamedMapConverter和HashMap,不带容器节点
假设我有以下Java类:
@XStreamAlias("object")
public class MyObject {
@XStreamAsAttribute
private String name;
private Map<String, String> description = new HashMap<>();
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public Map<String, String> getDescription() { return description; }
public void setDescription(Map<String, String> description) { this.description = description; }
}
如何初始化XStream以将其转换为以下XML(并解析XML以创建Java对象):
<?xml version="1.0" ?>
<object name="test">
<description language="en">Test en</description>
<description language="fr">Test fr</description>
</object>
?
当然,我希望语言是我的描述映射的关键,节点值是映射值
我试过这个:
XStream xs = new XStream(new DomDriver());
xs.processAnnotations(MyObject.class);
xs.registerConverter(new NamedMapConverter(xs.getMapper(), "description", "language", String.class, null, String.class, true, false, xs.getConverterLookup()));
但我得到了以下结果:
<object name="name test">
<description>
<description language="en">Test en</description>
<description language="fr">Test fr</description>
</description>
</object>
我怎样才能去掉集装箱标签
编辑:我希望避免为整个MyObject类编写自定义转换器,因为真正的转换有点复杂,目前除了描述字段外,它没有自定义转换器。类似于名为dMapConverter的东西会很棒
# 1 楼答案
我不知道XStream,但你可以用SimpleXml来实现
正如您所见,不需要配置解析器,只需将注释添加到字段中即可。输出如下:
<;?xml preample不会出现,但我相信如果确实需要的话,您可以自己添加它