如何在XStream的禁用漂亮的印刷(空白/换行)?
题
这是如何创建的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
的源代码的更多信息
不隶属于 StackOverflow