Java 如何在jaxb中注释类型集合的成员

Java 如何在jaxb中注释类型集合的成员,java,jaxb,marshalling,Java,Jaxb,Marshalling,我已成功封送了以下类 @XmlRootElement(name = "Field") private static class MyField { @XmlAttribute(name = "Name") String name; @XmlElement(name = "Size") int size; ....} 现在我想让我的容器类保存字段的多个实例,所以我用以下方式声明了一个类: private static class MyFiel

我已成功封送了以下类

@XmlRootElement(name = "Field")
private static class MyField {       
    @XmlAttribute(name = "Name")
    String name;
    @XmlElement(name = "Size")
    int size;
    ....}
现在我想让我的容器类保存字段的多个实例,所以我用以下方式声明了一个类:

private static class MyFieldsCollection {     
    private Collection<MyField> fields = new LinkedList<MyField>();

    public MyFieldsCollection() {}
    ....}
私有静态类MyFieldsCollection{
私有集合字段=新建LinkedList();
公共MyFieldsCollection(){}
....}
当我尝试封送容器字段时,会出现以下错误:

类java.util.LinkedList,也不知道它的任何超类


如何注释fields成员,使容器类被封送为字段集合?

您不应该将MyField类注释为@XmlRootElement,因为它不是xml根元素。我认为您可以使用@XmlType对其进行注释,也可以干脆不对其进行注释。您可以尝试将@XmlElement标记放入类中“fields”属性的getter。如果有效,您的XML将如下所示:

<MyFieldsCollection>
   <fields name="name1" size="size1"/>
   <fields name="name2" size="size2"/>
</MyFieldsCollection>


如果它不起作用,而且是在黑暗中拍摄的,请尝试将“集合”的类型更改为“列表”,以检查它是否有一些区别。您使用的是什么版本的Java?用于序列化对象的代码是什么样子的?

由于容器类没有注释,因此无法封送它。确保MyFieldsCollection是新的@XmlRootElement,而不是字段。另外,用@XmlList注释集合。