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

无法将包含JSON内容的字符串反序列化为C#对象求助

解决双重序列化JSON的反序列化问题

我刚碰到过完全一样的坑!你拿到的响应字符串明显是双重序列化的结果——简单说就是后端API先把对象序列成了JSON字符串,然后又把这个字符串再序列化了一遍,导致出现了一堆额外的转义符(比如\\\"这种),直接反序列化肯定会失败。

给你两种靠谱的解决办法,按需选择:

方法1:手动清理转义字符串

先把外层的包裹引号去掉,再把转义的双引号还原成普通双引号,得到正常的JSON后再反序列化:

// 原始响应内容
var contents = await response.Content.ReadAsStringAsync();

// 第一步:去掉前后的双引号(注意是字符串首尾的",不是转义的\")
var cleanedJson = contents.Trim('"');
// 第二步:把转义的\"替换成"
cleanedJson = cleanedJson.Replace("\\\"", "\"");

// 现在可以正常反序列化了(用Newtonsoft.Json)
var paymentResult = JsonConvert.DeserializeObject<YourPaymentModel>(cleanedJson);
// 如果用System.Text.Json的话:
// var paymentResult = System.Text.Json.JsonSerializer.Deserialize<YourPaymentModel>(cleanedJson);

方法2:先反序列化为字符串,再反序列化为目标对象

这种方法更稳妥,尤其是当转义情况更复杂的时候(比如嵌套的转义):

var contents = await response.Content.ReadAsStringAsync();

// 先把整个响应反序列化为一个普通字符串(因为现在的JSON本质上就是一个字符串)
var actualJson = JsonConvert.DeserializeObject<string>(contents);
// 再把这个字符串反序列化为你的目标对象
var paymentResult = JsonConvert.DeserializeObject<YourPaymentModel>(actualJson);

// System.Text.Json版本:
// var actualJson = System.Text.Json.JsonSerializer.Deserialize<string>(contents);
// var paymentResult = System.Text.Json.JsonSerializer.Deserialize<YourPaymentModel>(actualJson);

额外提醒

如果这是你们自己维护的API,最好找后端同事修复一下——双重序列化是个常见的低级错误,一般是后端代码里重复调用了序列化方法(比如先JsonConvert.SerializeObject,然后在返回的时候框架又自动序列化了一次)。前端先临时处理能解决问题,但根源修复才是长久之计。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:18:51