使用 JSON.NET 的 JsonConvert.SerializeObject
方法时,对象会被双重序列化,导致 JSON 响应错误。响应被包裹在引号中,嵌入的引号也被转义,导致 JSON 无效。
此问题通常发生在从 WebAPI 控制器返回已经使用 JSON.NET 序列化的字符串时。控制器随后会额外地将字符串序列化为 JavaScript 字符串字面量,从而导致双重序列化。
要解决此问题,请直接返回对象本身,而不是字符串。这样做,API 控制器将根据请求参数处理序列化,允许 JSON.NET 正确地序列化对象。这消除了双重序列化,并确保生成的 JSON 响应有效。
<code class="language-csharp">// 原代码:双重序列化 public string GetFoobars() { var foobars = ...; return JsonConvert.SerializeObject(foobars); } // 更新后的代码:直接返回对象 public IEnumerable<Foobar> GetFoobars() { var foobars = ...; return foobars; }</code>
通过将返回类型更新为正在序列化的对象的实际类型,控制器将适当地序列化结果,从而解决双重序列化问题。
有关 WebAPI 中序列化的更多信息,请参考以下资源:
以上是为什么我的 JSON.NET 序列化会生成双编码 JSON 字符串?的详细内容。更多信息请关注PHP中文网其他相关文章!