Frage

Dies ist, wie ich XStream Beispiel für XML zu erstellen:

XStream xstream = new XStream();

Dies ist für JSON:

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

Beide sind ziemlich Druck (Einrücken) die Ausgabe.

Wie kann ich bitte den Xstream den hübschen Druck zu deaktivieren?

War es hilfreich?

Lösung 2

Mit etwas Hilfe von der Gemeinde, ich habe die Antwort herausgefunden.

Für XML Sie haben die Art und Weise zu ändern, wie Sie serialisiert:

Die Zeile:

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

geändert Zeile

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

Für JSON Sie nur die Art und Weise ändern, wie die XStream erstellt. So ist die Initialisierung des XStream wird folgendermaßen geändert:

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

Beachten Sie, dass die 4-Parameter JsonWriter Konstruktor verwendet wird.

Andere Tipps

Vielen Dank, Ihre Beiträge geholfen !!! Hier ist, was ich in einen String konvertieren verwenden.

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

Mit der Marschal Methode auf xstream mit einem kompakten Schreiber

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

Das Standardverhalten von pretty-Druck aus dem AbstractXmlDriver.createWriter () -Methode kommt (XStream verwendet XppDriver als Standard-hierarchischen Strom-Treiber und diese erweitert AbstractXmlDriver):

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

Wenn Sie recht-Druck global deaktivieren wollen (während alle anderen Standardverhalten beibehalten) und verwenden Sie nur die einfache ToXml (o) Verfahren eher als etwa pro Nutzungsmöglichkeiten mit dem anderen durcheinander hier vorgeschlagen, können Sie Ihre initialisieren XStream Instanz als folgt. Dies überschreibt das obige Verfahren mit einem CompactWriter statt.

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

Erstellen Sie Ihre XStream Instanz auf diese Weise:

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

Hier ist ein Konstruktor von Format-Klasse:

/**
 * 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());
}

Überprüfen Sie einen Quellcode JsonWriter für weitere Informationen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top