2013-03-07 6 views
1

는에 변경 내용 내용 해결역 직렬화 된 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> 

문제는 때 I reach 다른 레벨로 더 깊숙이 들어가기 때문에 충돌합니다.

내 XML을 DeSerialize하는 방법입니다. 내용없이 작동합니다.

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

하고 마지막으로 내 개체 : 여기에

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.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

+0

내용을 목록으로 변경하고 XStream 마샬을 추가하여 해결했습니다. – Deejdd

+2

해결 된 경우 솔루션을 답변으로 게시하고 * 수락 *하십시오 (http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own- 질문 /) – ollo

답변

0

내용을 목록으로 변경하고 XStream 마샬을 추가하여 해결했습니다.

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