Domanda

Questo è il modo creo esempio XStream per XML:

XStream xstream = new XStream();

Questo è per JSON:

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

Entrambi sono abbastanza-stampa (indentazione) l'uscita.

Come posso chiedere al xstream per disabilitare la bella stampa?

È stato utile?

Soluzione 2

Con un po 'di aiuto da parte della comunità, ho capito la risposta.

Per XML è necessario cambiare il modo in cui si serializzare:

La linea:

xStream.toXML(o, new OutputStreamWriter(stream, encoding));

cambiato in riga

xStream.marshal(o, new CompactWriter(new OutputStreamWriter(stream, encoding)));

Per JSON si cambia solo il modo in cui viene creata la XStream. Così l'inizializzazione del xstream viene modificato in:

private final XStream xstreamOut = new XStream(new JsonHierarchicalStreamDriver() {
    public HierarchicalStreamWriter createWriter(Writer writer) {
        return new JsonWriter(writer, new char[0], "", JsonWriter.DROP_ROOT_MODE);
    }
});

Si noti che il costruttore di JsonWriter 4 parametri viene utilizzato.

Altri suggerimenti

Grazie, i tuoi messaggi aiutato !!! Ecco quello che io uso per convertire in una stringa.

String strXML = "";
XStream xs = new XStream();
StringWriter sw = new StringWriter();
xs.marshal(this,  new CompactWriter(sw));
strXML = sw.toString();

Utilizzare il metodo Marschal su XStream con uno scrittore compatto

xstream.marshal(someObject, new CompactWriter(out)); 

Il comportamento predefinito di pretty-printing deriva dal metodo AbstractXmlDriver.createWriter () (XStream usa XppDriver come il suo conducente flusso gerarchico predefinito e questo si estende AbstractXmlDriver):

public HierarchicalStreamWriter createWriter(Writer out) {
    return new PrettyPrintWriter(out, getNameCoder());
}

Se si desidera disabilitare pretty-stampa a livello globale (pur mantenendo tutti gli altri comportamenti di default) e basta usare il semplice toxml (o) il metodo, piuttosto che pasticciare con l'altro per utilizzare le opzioni suggerite qui, è possibile inizializzare l'istanza XStream come segue. Questo sostituisce il metodo di cui sopra con un CompactWriter invece.

XStream xstream = new XStream(new XppDriver() {
    @Override
    public HierarchicalStreamWriter createWriter(Writer out) {
        return new CompactWriter(out, getNameCoder());
    }
});

Crea l'istanza xstream in questo modo:

XStream xstream = new XStream(new JsonHierarchicalStreamDriver() {
        public HierarchicalStreamWriter createWriter(Writer writer) {
            return new JsonWriter(writer, JsonWriter.DROP_ROOT_MODE, new JsonWriter.Format(new char[0], new char[0], 0));
        }
});

Ecco un costruttore di classe di formato:

/**
 * Create a new Formatter.
 * 
 * @param lineIndenter the characters used for indenting the line
 * @param newLine the characters used to create a new line
 * @param mode the flags for the format modes
 * @since 1.4
 */
public Format(char[] lineIndenter, char[] newLine, int mode) {
    this(lineIndenter, newLine, mode, new NoNameCoder());
}

Verifica di un codice sorgente di JsonWriter per ulteriori informazioni

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top