.NET序列化能否独立设置行尾格式实现跨操作系统输出一致
针对C# JSON序列化统一行尾符为\r\n的解决方案
可以独立于操作系统自定义序列化的行尾格式,针对你提到的两个常用JSON库的实现方式如下:
System.Text.Json 实现方案
.NET 5及以上版本的System.Text.Json原生支持自定义换行符,直接配置JsonSerializerOptions的NewLine属性即可:
var options = new JsonSerializerOptions { WriteIndented = true, NewLine = "\r\n" // 强制使用CRLF风格换行符 }; string json = System.Text.Json.JsonSerializer.Serialize(data, options);
如果是.NET 5以下的版本,没有原生的NewLine配置项,可以序列化完成后统一替换换行符:
string json = System.Text.Json.JsonSerializer.Serialize(data, new JsonSerializerOptions { WriteIndented = true }); // 先统一转为LF再替换为CRLF,避免重复替换 json = json.Replace("\r\n", "\n").Replace("\n", "\r\n");
Newtonsoft.Json (Json.NET) 实现方案
通过自定义JsonTextWriter的换行属性即可实现,不需要修改全局配置:
using var stringWriter = new StringWriter(); using var jsonWriter = new JsonTextWriter(stringWriter) { Formatting = Formatting.Indented, NewLineChars = "\r\n" // 强制指定换行符为CRLF }; JsonSerializer.CreateDefault().Serialize(jsonWriter, data); string json = stringWriter.ToString();
你可以将上述逻辑封装为静态工具方法,和原生JsonConvert.SerializeObject的使用体验完全一致。
内容的提问来源于stack exchange,提问作者kktHlv
相关产品推荐
相关产品推荐

