[英]Generating newlines instead of CRLFs in Json.Net
對於我的unix / java朋友,我想在Json.Net中發送換行符('\\ n')而不是CRLF('\\ r \\ n')。 我嘗試將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
}
在深入研究Json.Net代碼之后,我看到問題出在JsonTextWriter.WriteIndent
,感謝Athari 。
而不是_writer.Write(Environment.NewLine);
它應該是_writer.WriteLine();
。
我已經向github發布了拉取請求。 https://github.com/JamesNK/Newtonsoft.Json/pull/271
如果要自定義縮進空格,只需覆蓋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();
}
}
}
在線上的協議就是一條線以crlf結尾。 如果你覺得你真的必須這樣做,那么后期處理是可行的方法 - 將其寫入字符串然后在返回之前更改字符串。
請注意,對於我認為實際為負的內容,這是一個額外的處理。 不建議。
我在這里看到幾個配置序列化器的解決方案。 但如果你想要快速和骯臟,只需用你想要的字符替換字符。 畢竟,JSON只是一個字符串。
string json = JsonConvert.SerializeObject(myObject);
json = json.Replace("\r\n", "\n");
我知道這是一個老問題,但我很難得到工作中接受的答案並保持適當的縮進格式。 作為一個加號,我也沒有創建一個覆蓋來使這項工作。
以下是我如何使其正常工作:
using (var writer = new StringWriter())
{
writer.NewLine = "\r\n";
var serializer = JsonSerializer.Create(
new JsonSerializerSettings
{
Formatting = Formatting.Indented
});
serializer.Serialize(writer, data);
// do something with the written string
}
我假設此問題中引用的代碼更改使得StringWriter
上的NewLine
設置能夠被序列化程序遵守。
result = result.Replace(@“\\ r \\ n”,“\\ n”);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.