这是如何创建的XStream实例为XML:

XStream xstream = new XStream();

这是用于JSON:

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

他们两人都是相当印刷(缩进)的输出。

我怎么能要求的XStream把禁用漂亮的印刷?

有帮助吗?

解决方案 2

通过从社区一些帮助,我已经想通了答案。

对于XML 你必须改变你的序列化的方式:

行:

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

改变为线

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

对于JSON 您只更改如何创建XStream的方式。所以XStream的的初始化被改变为:

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

注意,4-参数JsonWriter构造被使用。

其他提示

谢谢,您的文章帮助!以下是我用它来转换为字符串。

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

使用marschal方法上XStream的具有紧凑作家

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

漂亮印刷的默认行为来自AbstractXmlDriver.createWriter()方法(使用的XStream XppDriver作为其默认分层流驱动器和该延伸AbstractXmlDriver):

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

如果要禁用全局漂亮的印刷(同时保留其他所有默认行为),只是使用简单toxml用于(O)方法,而不是每个在这里建议使用选择其他折腾了,你可以初始化你XStream的实例作为如下。这将覆盖用CompactWriter代替上述方法。

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

在这种方式创建XStream的实例:

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

下面是格式类的构造函数:

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

检查JsonWriter的源代码的更多信息

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top