Question

Voici comment je crée exemple XStream pour XML:

XStream xstream = new XStream();

Ceci est pour JSON:

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

Les deux sont assez d'impression (indenter) la sortie.

Comment puis-je demander au XStream de désactiver la jolie impression?

Était-ce utile?

La solution 2

Avec l'aide de la communauté, j'ai compris la réponse.

Pour XML vous devez changer la manière dont vous sérialisez:

La ligne:

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

changé à la ligne

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

Pour JSON vous modifiez uniquement la manière dont le XStream est créé. Ainsi, l'initialisation du XStream est modifiée:

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

Notez que le constructeur JsonWriter à 4 paramètres est utilisé.

Autres conseils

Merci, vos messages ont aidé !!! Voici ce que j'utilise pour convertir en chaîne.

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

Utilisez la méthode Marschal sur xstream avec un écrivain compact

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

Le comportement par défaut de assez d'impression provient de la méthode AbstractXmlDriver.createWriter () (XStream utilise XppDriver que son conducteur de flux hiérarchique par défaut, ce qui étend AbstractXmlDriver):

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

Si vous souhaitez désactiver jolie impression au niveau mondial (tout en conservant tous les autres comportements par défaut) et il suffit d'utiliser la méthode simple toXML (o) plutôt que de bricoler avec l'autre par des options d'utilisation proposées ici, vous pouvez initialiser votre instance XStream comme suit. Cette opération remplace la méthode ci-dessus avec un CompactWriter à la place.

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

Créer votre instance XStream ainsi:

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

Voici un constructeur de classe Format:

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

Vérifier un code source de JsonWriter pour plus d'informations

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top