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

序列化动态对象时移除转义字符的非字符串替换方案咨询

问题:JSON序列化后出现转义引号或多余格式,如何不用string.Replace解决?

我在做动态对象的序列化操作,用JsonConvert.SerializeObject序列化ExpandoObject后,调试器里看到的响应是"{\"firstname\":\"prasanthi\",\"lastname\":\"kota\"}",不想用string.Replace或者正则来处理转义符。试过JavaScriptSerializer也会出现带转义的引号,后来用匿名对象加Formatting.Indented得到的是带换行和空格的JSON,也不是我想要的结果。我需要得到没有斜杠、紧凑格式的JSON字符串,求其他解决方案。


解决方案

首先要澄清一个很容易踩的坑:你在调试器里看到的\"并不是字符串实际包含的内容!调试器为了在字符串字面量中展示双引号,会自动添加转义符,但实际序列化后的字符串本身是标准的JSON,没有多余的转义。你可以通过Console.WriteLine(serialized_info)或者把字符串写入文件来验证,输出的肯定是干净的{"firstname":"prasanthi","lastname":"kota"}。

如果确实遇到了实际字符串中存在转义的情况(大多是因为二次序列化导致的,比如把已经序列化好的字符串又传给了序列化方法),或者你需要确保输出紧凑无格式的JSON,可以试试下面这些方法:

  • 避免重复序列化:如果你的API是直接返回序列化后的字符串,不要把这个字符串再包装一次序列化。比如直接返回对象本身让API框架去处理序列化,而不是先序列化再返回字符串(这样框架可能会把字符串再序列化一次,导致出现转义)。

  • 使用默认的紧凑序列化格式:JsonConvert.SerializeObject默认就是用Formatting.None,会生成无换行无空格的紧凑JSON。之前你用Formatting.Indented才会得到带换行的格式,去掉这个参数即可:

    dynamic x = new { firstname = "prasanthi", lastname = "kota" };
    var serialized_info = JsonConvert.SerializeObject(x); // 等价于加Formatting.None
    // 结果就是 {"firstname":"prasanthi","lastname":"kota"}
    
  • 检查序列化上下文:如果你是在某些特殊环境下(比如把JSON字符串嵌入到另一个JSON结构中),那可能需要用专门的嵌套序列化方式,而不是手动处理转义。比如直接把对象作为父对象的属性,而不是先序列化再赋值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:47:55