对于我的unix / java朋友,我想发送换行符('\ n')而不是CRLF( '\ r \ n')在Json.Net中。我尝试将StreamWriter设置为使用换行而没有任何成功。
我认为 Json.Net 代码正在使用Environment.NewLine
而不是调用TextWriter.WriteNewLine()
。更改Environment.NewLine
不是一个选项,因为我作为服务器运行,换行编码基于请求。
是否有某种其他方式来强制换取crlf?
这是我的代码 -
using (var streamWriter = new StreamWriter(writeStream, new UTF8Encoding(false))
{
NewLine = "\n"
})
using (var jsonWriter = new JsonTextWriter(streamWriter)
{
CloseOutput = true,
Indentation = 2,
Formatting = Formatting.Indented
})
{
// serialise object to JSON
}
答案 0 :(得分:8)
在深入研究Json.Net代码后,我发现问题出在JsonTextWriter.WriteIndent
,感谢 Athari 。
而不是_writer.Write(Environment.NewLine);
,它应该是_writer.WriteLine();
。
我已经向github发布了拉取请求。 https://github.com/JamesNK/Newtonsoft.Json/pull/271
答案 1 :(得分:6)
如果要自定义缩进空格,只需覆盖JsonTextWriter.WriteIndent
:
public class JsonTextWriterEx : JsonTextWriter
{
public string NewLine { get; set; }
public JsonTextWriterEx (TextWriter textWriter) : base(textWriter)
{
NewLine = Environment.NewLine;
}
protected override void WriteIndent ()
{
if (Formatting == Formatting.Indented) {
WriteWhitespace(NewLine);
int currentIndentCount = Top * Indentation;
for (int i = 0; i < currentIndentCount; i++)
WriteIndentSpace();
}
}
}
答案 2 :(得分:1)
在线路协议上,就是一条线以crlf结尾。如果你觉得你真的必须这样做,那么后期处理是要走的路 - 把它写成一个字符串,然后在返回之前改变字符串。
请注意,对于我认为实际为负的内容,这是一个额外的处理。不推荐。
答案 3 :(得分:1)
我在这里看到几个配置序列化器的解决方案。但如果你想要快速和肮脏,只需用你想要的字符替换字符。毕竟,JSON只是一个字符串。
string json = JsonConvert.SerializeObject(myObject);
json = json.Replace("\r\n", "\n");
答案 4 :(得分:-2)
result = result.Replace(@“ \ r \ n”,“ \ n”);