Pergunta

Isto é como eu criar instância XStream para XML:

XStream xstream = new XStream();

Isto é para JSON:

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

Ambos são bastante-impressão (recuar) a saída.

Como posso pedir o XStream para desativar a impressão bonita?

Foi útil?

Solução 2

Com alguma ajuda da comunidade, eu descobri a resposta.

Para XML você tem que mudar a maneira como você serializar:

A linha:

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

alterado para linha

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

Para JSON você só mudar a maneira como o XStream é criado. Então a inicialização do XStream é alterado para:

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

Note que o construtor JsonWriter 4 parâmetro é utilizado.

Outras dicas

Obrigado, suas mensagens ajudou !!! Aqui está o que eu uso para converter para uma string.

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

Use o método Marschal em xstream com um escritor compacto

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

O comportamento padrão de impressão bonita vem do método AbstractXmlDriver.createWriter () (XStream usa XppDriver como seu motorista fluxo hierárquico padrão e isso se estende AbstractXmlDriver):

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

Se você quiser desativar pretty-impressão globalmente (mantendo todos os outros comportamentos padrão) e usar apenas o método toXML simples (o) ao invés de mexer com o outro por opções de uso sugerido aqui, você pode inicializar sua instância XStream como segue. Isso substitui o método acima com um CompactWriter vez.

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

Crie sua instância XStream desta forma:

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

Aqui é um construtor de classe 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());
}

Verifique o código fonte de JsonWriter para mais informações

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top