3

次の XML 文字列があり、それをオブジェクトに逆シリアル化しようとしていますが、最終的な結果は正しくありません。

XML 文字列は次のとおりです。
<Header><Sequence value=\"bbb-mySeq\"/><Session value=\"aaa-myValue\"/></Header>";

逆シリアル化しようとしているオブジェクトは次のとおりです。

public class Header implements Serializable {

private static final long serialVersionUID = 1L;

private List<Session> sessions = new ArrayList<Session>();
private List<Sequence> sequences = new ArrayList<Sequence>();

public List<Session> getSession() {
    return sessions;
}

public void setSession(Session session) {
    this.sessions.add(session);
}

public List<Sequence> getSequence() {
    return sequences;
}

public void setSequence(Sequence sequence) {
    this.sequences.add(sequence);
    }

}

シーケンス オブジェクトは次のとおりです。

public class Sequence implements Serializable {

private static final long serialVersionUID = 1L;
private String value;

public String getValue() {
    return value;
}

public void setValue(String value) {
    this.value = value;
}

}

逆シリアル化コードは次のとおりです。

    XStream xstream = new XStream();

    xstream.alias("Header", Header.class);
    xstream.alias("Session", Session.class);
    xstream.alias("Sequence", Sequence.class);

    xstream.addImplicitCollection(Header.class, "sessions");
    xstream.addImplicitCollection(Header.class, "sequences");

    xstream.useAttributeFor(Session.class, "value");
    xstream.useAttributeFor(Sequence.class, "value");
    System.out.println("msg: " + msg);

    Header result = (Header) xstream.fromXML(msg);

toString()結果のオブジェクトに対してa を実行すると、次のように表示されます。

Header [sessions=null, sequences=[Sequence [value=bbb-mySeq], Session [value=aaa-myValue]]]

ご覧のとおり、Sequences に Session はありません。助けてくれてありがとう。

4

1 に答える 1

2

呼び出しを addImplicitCollection に変更します。

xstream.addImplicitCollection(Header.class, "sessions", Session.class);
xstream.addImplicitCollection(Header.class, "sequences", Sequence.class);

ボアズ

于 2012-12-12T08:57:03.187 に答える