1

XStreamでシリアライズしています。XML には StaxDriver を使用し、JSON には JettisonMappedXmlDriver を使用します。

if (this.format == ISerializer.Format.JSON){
    logger.info("json");
    /* note: JsonHierarchicalStreamDriver can read Json only */
    this.xstream = new XStream(new JettisonMappedXmlDriver());
}
else if (this.format == ISerializer.Format.XML){
    logger.info("xml");
    this.xstream = new XStream(new StaxDriver());
}

XML ではきれいな印刷が得られますが、JSON ではきれいな印刷は得られません。

public boolean toStream(Object object, Writer writer){
        if(this.usePrettyPrint == true){
        this.xstream.marshal(object, new PrettyPrintWriter(writer));
    }else{
            this.xstream.toXML(object, writer);
    }
    return true;
}

コードをこのままにしておくと、JSON の代わりに XML が返されます。JSON を取得するには、このようにコードを書き直さなければなりませんでしたが、きれいに印刷されていません。

public boolean toStream(Object object, Writer writer){
    if (this.format == ISerializer.Format.JSON){
        this.xstream.toXML(object, writer);
    }
    else{
        if(this.usePrettyPrint == true){
            this.xstream.marshal(object, new PrettyPrintWriter(writer));
        }else{
            this.xstream.toXML(object, writer);
        }
    }
    return true;
}

JettisonMappedXmlDriver を使用して JSON できれいに印刷する方法を知っていますか?

XStream のドキュメントには、それに関する情報はありません。

http://x-stream.github.io/json-tutorial.html

しかし、シリアライズとデシリアライズ (JettisonMappedXmlDriver) を可能にしたい場合、XStream を使用してかなり印刷された JSON を取得する方法がないとは信じられません...

ありがとう!

4

1 に答える 1

0

私はかつて同様の問題を抱えていましたが、JsonHierarchicalStreamDriverを使用しましたが、私の解決策は

this.xstream = new XStream(new JsonHierarchicalStreamDriver () {
    public HierarchicalStreamWriter createWriter(Writer writer) {
        return new JsonWriter(writer, JsonWriter.DROP_ROOT_MODE);
    }
});

かもね

this.xstream = new XStream(new JettisonMappedXmlDriver() {
    public HierarchicalStreamWriter createWriter(Writer writer) {
        return new JsonWriter(writer, JsonWriter.DROP_ROOT_MODE);
    }
});

あなたのために働く=)

于 2013-03-04T19:42:38.253 に答える