C# 使用Newtonsoft JSON将JSON中\n转义为\\n的实现方案咨询
方案1:序列化阶段通过自定义转换器自动处理(推荐)
Newtonsoft.Json 支持自定义 JsonConverter 修改字段序列化逻辑,你可以注册字符串专属转换器,自动对所有字符串值中的换行符做二次转义,无需手动处理每个字段:
using Newtonsoft.Json; using System; public class EscapeNewLineConverter : JsonConverter<string> { public override void WriteJson(JsonWriter writer, string value, JsonSerializer serializer) { // 将字符串内的换行符转义为字面量 \n string processedValue = value.Replace("\n", "\\n"); // 如果需要同时处理回车符可以追加 .Replace("\r", "\\r") writer.WriteValue(processedValue); } public override string ReadJson(JsonReader reader, Type objectType, string existingValue, bool hasExistingValue, JsonSerializer serializer) { // 反序列化时如果需要还原原始换行,可在此处做反向替换,不需要直接返回原值即可 return reader.Value?.ToString()?.Replace("\\n", "\n") ?? string.Empty; } }
序列化时直接传入转换器即可:
// 业务实体类示例 public class ConfigItem { public string Name { get; set; } public string Value { get; set; } } // 序列化调用代码 var config = new ConfigItem { Name = "KeyName", Value = "你的XML业务内容" }; string finalJson = JsonConvert.SerializeObject(config, new JsonSerializerSettings { Converters = { new EscapeNewLineConverter() } });
方案2:序列化完成后全局替换JSON字符串
如果是临时场景不想新增转换器类,也可以直接对序列化输出的原始JSON做全局替换,实现更简便:
string rawJson = JsonConvert.SerializeObject(config); // 原始JSON中的换行符存储为 \n,替换后变为 \\n string finalJson = rawJson.Replace("\\n", "\\\\n");
内容的提问来源于stack exchange,提问作者Keshav Prasad
相关产品推荐
相关产品推荐

