2013-03-07 201 views
1

解决 更改的内容内容:反序列化XML

// Lists 
    @XStreamImplicit(itemFieldName = "Contents") 
    public List<Contents> Contents = new ArrayList<Contents>(); 

我试图反序列化下面的XML:

<?xml version="1.0" encoding="UTF-8"?> 
<Items> 
    <Item> 
     <type>Test</type> 
     <uid>1</uid> 
     <depends>1</depends> 
     <catid>1</catid> 
     <label>Test</label> 
     <defaultVal>default</defaultVal> 
     <answer>Test</answer> 
     <Contents> 
     <Content> 
      <uid>1</uid> 
      <label>Test</label> 
     </Content> 
     </Contents> 
    </Item> 
</Items> 

的问题是,当我达到由于深入另一个层次而崩溃的内容。

这是我如何DeSerialize我的XML,它的工作原理没有内容。

public static Object DeSerializeFromXML(String xml, Class items, Class item) 
{ 
    XStream xstream = new XStream(); 
    xstream.processAnnotations(new Class[] { items, item }); 

    return xstream.fromXML(xml); 
} 

这是我如何调用反序列化方法:

Items reader = (Items)Data.Serialization.Instance().DeSerializeFromXML(xml, Items.class, Item.class); 

而且去年我的对象:

Items.cs

@XStreamAlias("Items") 
public class Items 
{ 
    public Items() { items = new ArrayList<Item>(); } 

    @XStreamImplicit(itemFieldName = "Item") 
    public List<Item> items = new ArrayList<Item>(); 
} 

Item.cs

@XStreamAlias("Item") 
public class Item 
{ 
    // Type 
    public String type = ""; 

    // Ids 
    public int uid = 0; 
    public int catid = 0; 
    public int depends = 0; 

    // Values 
    public String label = ""; 
    public String defaultVal = ""; 
    public String answer = ""; 

    // Lists 
    public Contents content;  

    public Item() 
    { 
    } 

    public Item(String type, int uid, int catid, int depends, String label, 
      String defaultval, String answer) 
    { 
     this.type = type; 
     this.uid = uid; 
     this.catid = catid; 
     this.depends = depends; 
     this.label = label; 
     this.defaultVal = defaultval; 
     this.answer = answer; 

     content = new Contents(); 
    } 

    @XStreamAlias("Contents") 
    public static class Contents 
    { 
     public Contents() 
     { 
      contents = new ArrayList<Content>(); 
     } 

     @XStreamImplicit(itemFieldName = "Content") 
     public List<Content> contents = new ArrayList<Content>(); 
    } 

Content.cs

@XStreamAlias("Content") 
public class Content 
{ 
    public int uid = 0; 
    public String label = ""; 

    public Content() 
    { 
    } 

    public Content(int uid, String label) 
    { 
     this.uid = uid; 
     this.label = label; 
    } 

我不太清楚,如果我的下一个级别的注解是正确的。 任何帮助表示赞赏。

+0

你应该真的发布你的崩溃日志。 – Timmetje 2013-03-07 15:15:27

+0

通过将内容更改为列表并添加XStream编组来解决它。 – Deejdd 2013-03-07 15:44:28

+2

如果解决了问题,请将您的解决方案作为答案并*接受*(请参阅:http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-问题/) – ollo 2013-03-07 17:09:17

回答

0

通过将内容更改为列表并添加XStream编组来解决它。

@XStreamImplicit(itemFieldName = "Contents") 
public List<Contents> Contents = new ArrayList<Contents>();