我正在使用 J2SE 附带的 JAXB 实现来序列化包含 HashMap 属性的 bean。我认为这应该是开箱即用的,因为 这表明
当将 Map 用作 bean 的属性时,JAXB 规范定义了对 Map 的特殊处理。例如,以下 bean 将生成如下 XML: ...
除非结构具有多个级别,否则这或多或少有效,即 HashMap 是 bean 的属性,它是 bean 的属性 - 如下所示:
import java.util.HashMap;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.JAXB;
class bean {
@XmlElement public HashMap<String,String> map;
}
@XmlRootElement class b2 {
@XmlElement public bean b;
}
class foo {
public static void main(String args[]) {
try {
bean b = new bean();
b.map = new HashMap<String,String>();
b.map.put("a","b");
b2 two = new b2();
two.b=b;
JAXB.marshal(two, System.out);
} catch (Exception e) {
System.out.println("Exception: " + e.toString());
}
}
}
这将输出
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><b2><b><map/></b></b2>
而不是正确格式化的 HashMap。如果我用 from 注释并删除它,它会起作用bean
,但@XmlRootElement
我不明白为什么这应该是必要的。应该是这样吗?@XmlElement
map