2012-07-19 55 views
3

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

将欣赏我在做什么错误的线索或用复杂对象反序列化内联列表的工作示例。

谢谢。

附件是我对象的一个​​简单的例子:

我的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; 
} 
+0

据我可以告诉你的xml列表实际上是* not * inline,因为每个Person都有一个合适的根元素。我会从删除'@ElementList(inline = true)'开始。以下是一些值得关注的例子:[反序列化列表](http://simple.sourceforge.net/download/stream/doc/tutorial/tutorial.php#list)&[反序列化列表](http: //simple.sourceforge.net/download/stream/doc/tutorial/tutorial.php#inline)。 – 2012-07-19 19:23:05

+0

谢谢。我看到了例子,这就是为什么我认为我的列表是内联的..如果我删除@ElementList(内联=真),我将如何得到人员列表..? – ckita 2012-07-19 20:56:07

回答

5

我对需要这么长的时间,你回去道歉。如果你现在还没有弄清楚问题,我就对你的例子进行了一番尝试,并设法找到解决方案。它其实非常简单,而且你可以亲自操作。请忽略我先前的评论,因为这不会让你更接近解决问题。

有你需要改变两个东西,使其工作:

首先,在MyPersons添加entry="Person"的元素列表,这样的结果会是这样的:

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

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

+0

非常感谢!奇迹般有效! :)是的,这是一个错字,这些不是我的真实对象,我为了这个问题简化了它们。 – ckita 2012-07-21 07:56:04

相关问题