C# WebClient发送POST时如何保留JSON中的\n字符而非换行
解决WebClient发送JSON时保留\n转义字符的问题
这个问题我之前也碰到过,核心是JSON的转义逻辑没处理对——你想要在最终输出里保留\n这个字符串,而不是让它被解析成实际的换行符,得从JSON构造的环节入手,给你几个可行的方案:
方案一:手动构造JSON时使用双重转义
如果你是直接拼接JSON字符串,要记住JSON里的\本身就是转义字符,所以想要最终的JSON里出现\n,你需要在代码里写\\n(也就是双重转义)。示例代码:
// 构造包含\\n的JSON字符串,发送后会被解析为\n string jsonContent = "{\"content\": \"This is a Test\\n This is a Test2\"}"; using (var client = new WebClient()) { client.Headers[HttpRequestHeader.ContentType] = "application/json"; client.UploadString("你的目标接口地址", jsonContent); }
这样发送出去的JSON内容里,\\n会被正确识别为\n字符串,而不是被转换成换行。
方案二:用JSON序列化库配置转义规则
如果你是通过对象序列化生成JSON(比如用Newtonsoft.Json),可以通过序列化配置来确保\n被保留。比如在对象的属性值里先写\\n,再搭配合适的序列化设置:
using Newtonsoft.Json; // 定义数据对象 var payload = new { Content = "This is a Test\\n This is a Test2" }; // 序列化时配置转义规则 string jsonContent = JsonConvert.SerializeObject(payload, new JsonSerializerSettings { // 确保仅转义必要的字符,保留手动添加的转义序列 StringEscapeHandling = StringEscapeHandling.Default }); // 发送逻辑和方案一一致 using (var client = new WebClient()) { client.Headers[HttpRequestHeader.ContentType] = "application/json"; client.UploadString("你的目标接口地址", jsonContent); }
这样序列化后的JSON会保留\n字符串,而不是把它转换成实际换行。
关键原理说明
JSON语法中,\n是表示换行的转义序列;如果想要让接收方解析后得到的是\n这个文本,而不是换行,就需要在发送的JSON里把它写成\\n——这样JSON解析器会把\\识别为单个\,最终得到\n字符串。
内容的提问来源于stack exchange,提问作者Oscar vs
相关产品推荐
相关产品推荐

