2012-07-19 49 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

相關問題