Android - 如何使用Simple api反序列化包含对象列表的xml

时间:2012-07-19 19:02:37

标签: android xml-deserialization

我需要使用简单的api反序列化对象的xml响应。 当我反序列化一个对象时,它工作正常,但是当我尝试反序列化内联列表时,我得到一个异常: org.simpleframework.xml.core.ElementException:元素' Person'在第3行的MyPersons课程中没有匹配。

会理解我做错了什么的线索,或者反复使用复杂对象反序列化内联列表的工作示例。

感谢。

附件是我的对象的简化示例:

我的xml:

<Persons>
    <Person>
        <Info> 
            <ID>1</ID>
            <Name>A</Name>
        </Info>
        <Address>aaa</Address> 
        <Products> 
            <Product>
                <Name>foo</Name> 
                <Product>foofoo</Product> 
            </Product> 
            <Product>
                <Name>bar</Category>
                <Product>barbar</Product> 
            </Product>
        </Products>
    </Person>
    <Person>
        <Info> 
            <ID>2</ID>
            <Name>B</Name>
        </Info>
        <Address>bbb</Address> 
        <Products> 
            <Product>
                <Name>foo2</Name> 
                <Product>foofoo2</Product> 
            </Product> 
            <Product>
                <Name>bar2</Category>
                <Product>barbar2</Product> 
            </Product>
        </Products>
    </Person>
</Persons>

我的对象:

@Root(name="Persons")
public class MyPersons {

    @ElementList(inline=true)
    private List<Person> persons;
}

@Root
public class Person {

    @Element
    private Info Info;

    @Element(required=false)
    private String Address;

    @ElementList
    private List<Product> Products;

    public Person(@Element(name="Info") Info Info){

        this.Info = Info;
        //doing some logic 
    }
}

public class Product {

    @Element
    private String Name; 
    @Element
    private String Product;
}


@Root
public class Info {

    @Element(required=false)
    private String ID;  
    @Element
    private String Name;
}

1 个答案:

答案 0 :(得分:5)

我很抱歉花了这么长时间才回到你身边。如果您现在还没有弄清楚问题,我会对您的示例进行一些调整,并设法找到解决方案。它实际上非常简单,你真的很接近自己的工作。请忽略我之前的评论,因为这不会让你更接近解决问题。

要使其发挥作用,您需要更改两件事:

首先,将entry="Person"添加到MyPersons中的元素列表中,这样结果将如下所示:

@ElementList(entry="Person", inline=true)
private List<Person> persons;

其次,如果您计划在提供的xml示例上对其进行测试,请修复一些名称条目以获得正确的结束标记。例如:<Name>bar</Category>,这显然会破坏xml结构的有效性。我很确定这只是一个错字,并且您的实时数据中不存在相同的错误。