2013-02-22 26 views
1

我正在用XStream進行序列化。對於XML我使用StaxDriver和JSON我使用JettisonMappedXmlDriver:JettisonMappedXmlDriver和漂亮的XStream打印

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

如果我離開我的這個代碼這樣,我會得到XML而不是JSON,我不得不重寫我的代碼這種方式來獲得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; 
} 

你知道一種方式來獲得漂亮的打印在JSON與JettisonMappedXmlD河?

在XStream的文檔沒有關於它的信息,他們甚至似乎覺得OK:

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

,但我不能相信,有沒有辦法讓漂亮打印JSON,如果你使用的XStream希望能夠序列化和反序列化(JettisonMappedXmlDriver)...

謝謝!

回答

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

作品你=)

+0

Wolfi你好,謝謝你的回答,它不是真的工作,現在我正在使用GSON ... – Rafa 2013-03-05 12:38:12