You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Newtonsoft序列化时如何避免换行符被额外转义?

解决Newtonsoft序列化时保留\n格式的问题

首先明确问题根源:你从数据库取出的字符串里的\n是字面量的两个字符(反斜杠+n),而非实际的换行符。硬编码的普通字符串"Hello \n world"里的\n是C#解析后的实际换行符,所以Newtonsoft序列化后会输出JSON合法的\n;但逐字字符串或数据库取出的字面\n,Newtonsoft会默认把反斜杠转义为\\,最终得到\\n。

不用字符串替换的解决方案如下:

方案1:修正数据库存储(推荐)

如果数据库里的\n本应表示换行,那在插入/更新数据时,把字面的\n转换为实际的换行符(对应SQL的CHAR(10))。这样通过Linq取出的字符串里是真正的换行符,Newtonsoft默认序列化就会输出\n,完全符合需求,无需额外处理。

方案2:自定义Newtonsoft字符串转换器

如果无法修改数据库,可以自定义一个JsonConverter,在序列化时自动把字符串中的字面\\n转换为实际换行符,让Newtonsoft按正常换行处理:

public class LiteralNewlineConverter : JsonConverter<string>
{
    public override string ReadJson(JsonReader reader, Type objectType, string existingValue, bool hasExistingValue, JsonSerializer serializer)
    {
        // 反序列化时可根据需求,把JSON的\n转回字面\\n,按需启用
        var value = (string)reader.Value;
        return value?.Replace("\n", "\\n");
    }

    public override void WriteJson(JsonWriter writer, string value, JsonSerializer serializer)
    {
        // 序列化时将字面\\n替换为实际换行符
        var processedValue = value?.Replace("\\n", "\n");
        writer.WriteValue(processedValue);
    }
}

使用时在序列化配置中添加这个转换器:

var settings = new JsonSerializerSettings();
settings.Converters.Add(new LiteralNewlineConverter());
var json = JsonConvert.SerializeObject(yourDataModel, settings);

这样处理后,数据库取出的带字面\n的字符串,序列化后会在JSON中保留\n格式,无需在业务代码里手动做字符串替换。

内容的提问来源于stack exchange,提问作者JKL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 22:12:46