1

Android で Java オブジェクトから XML を生成する必要があります。XML ノードは明確な順序である必要があります。XML ノードのXStream ドキュメントの順序は、オブジェクトのフィールド定義と一致します。Java クラス (文字列、日付など) をフィールドとして使用しても問題ありません。しかし、オブジェクトをフィールドとしてシリアル化する必要がある場合に問題があります。

これが私のコードです:

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)

一部のエンティティ:

@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;
    }
}

内部エンティティ:

@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;
    }
}

2 番目のエンティティ:

@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>
4

1 に答える 1

0

InnerEntity と SecondEntity には、このインターフェイス FieldKeySorter を実装してください

于 2013-06-28T09:10:19.167 に答える