2013-02-28 151 views
1

我需要從Android上的Java對象生成XML。 XML節點必須按照確定的順序。 截止日期XStream documentation XML節點順序匹配對象的字段定義。當我使用java類(String,Date ...)作爲字段時沒有問題。但是當我需要將我的對象序列化爲字段時出現問題。有沒有辦法設置Xstream序列化的順序

這裏是我的代碼:

final XStream x = new XStream(); 

x.autodetectAnnotations(true); 

SecondEntity secondEntity = new SecondEntity(); 
secondEntity.setSecondaryDate(new Date()); 
secondEntity.setSecondaryString("Secondary String"); 

InnerEntity innerEntity = new InnerEntity(); 
innerEntity.setInnerDate(new Date()); 
innerEntity.setInnerString("Inner String"); 

SomeEntity someEntity = new SomeEntity(); 
someEntity.setInnerEntity(innerEntity); 
someEntity.setSecondEntity(secondEntity); 
someEntity.setSomeDate(new Date()); 
someEntity.setSomeString("Some string"); 

x.toXML(someEntity) 

SomeEntity:

@XStreamAlias("SomeEntity") 
public class SomeEntity { 
    @XStreamAlias("innerEntity") 
    private InnerEntity innerEntity; 
    @XStreamAlias("secondEntity") 
    private SecondEntity secondEntity; 
    @XStreamAlias("someString") 
    private String someString; 
    @XStreamAlias("someDate") 
    private Date someDate; 

    public InnerEntity getInnerEntity() { 
     return innerEntity; 
    } 

    public void setInnerEntity(InnerEntity innerEntity) { 
     this.innerEntity = innerEntity; 
    } 

    public SecondEntity getSecondEntity() { 
     return secondEntity; 
    } 

    public void setSecondEntity(SecondEntity secondEntity) { 
     this.secondEntity = secondEntity; 
    } 

    public String getSomeString() { 
     return someString; 
    } 

    public void setSomeString(String someString) { 
     this.someString = someString; 
    } 

    public Date getSomeDate() { 
     return someDate; 
    } 

    public void setSomeDate(Date someDate) { 
     this.someDate = someDate; 
    } 
} 

InnerEntity:

@XStreamAlias("InnerEntity") 
public class InnerEntity { 
    @XStreamAlias("innerString") 
    private String innerString; 
    @XStreamAlias("innerDate") 
    private Date innerDate; 

    public String getInnerString() { 
     return innerString; 
    } 

    public void setInnerString(String innerString) { 
     this.innerString = innerString; 
    } 

    public Date getInnerDate() { 
     return innerDate; 
    } 

    public void setInnerDate(Date innerDate) { 
     this.innerDate = innerDate; 
    } 
} 

SecondEntity:

@XStreamAlias("SecondEntity") 
public class SecondEntity { 
    @XStreamAlias("secondaryString") 
    private String secondaryString; 
    @XStreamAlias("secondaryDate") 
    private Date secondaryDate; 

    public String getSecondaryString() { 
     return secondaryString; 
    } 

    public void setSecondaryString(String secondaryString) { 
     this.secondaryString = secondaryString; 
    } 

    public Date getSecondaryDate() { 
     return secondaryDate; 
    } 

    public void setSecondaryDate(Date secondaryDate) { 
     this.secondaryDate = secondaryDate; 
    } 
} 

我得到

<SomeEntity> 
    <innerEntity> 
     <innerDate>2013-02-28 18:04:24.184 UTC</innerDate> 
     <innerString>Inner String</innerString> 
    </innerEntity> 
    <secondEntity> 
     <secondaryDate>2013-02-28 18:04:24.183 UTC</secondaryDate> 
     <secondaryString>Secondary String</secondaryString> 
    </secondEntity> 
    <someDate>2013-02-28 18:04:24.184 UTC</someDate> 
    <someString>Some string</someString> 
</SomeEntity> 

當我需要:

<SomeEntity> 
    <innerEntity> 
     <innerString>Inner String</innerString> 
     <innerDate>2013-02-28 18:04:24.184 UTC</innerDate> 
    </innerEntity> 
    <secondEntity> 
     <secondaryString>Secondary String</secondaryString> 
     <secondaryDate>2013-02-28 18:04:24.183 UTC</secondaryDate> 
    </secondEntity> 
    <someDate>2013-02-28 18:04:24.184 UTC</someDate> 
    <someString>Some string</someString> 
</SomeEntity> 
+0

您是否嘗試在第一個代碼塊中重新排序您的'entity.set'方法以反映您想要的排序?根據文件,你應該得到你所期望的,但我會試着給你。 – JWiley 2013-02-28 18:33:25

+1

是的,我有。但結果是一樣的。 – 2013-03-01 09:26:34

+0

我面臨同樣的問題,你能幫助我嗎? http://stackoverflow.com/questions/16978651/how-to-annotation-order-field-when-using-xstream-on-android – Folee 2013-06-07 07:52:13

回答

相關問題