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

嵌套JSON字符串反序列化问题:处理未知源转义ASCII数据

解决方案:用两次JSON反序列化替代手动转义

别用手动替换转义字符的方式,这种方法覆盖不全还容易出错。正确的做法是利用JSON序列化器的原生能力,分两步处理:

  1. 还原嵌套的JSON字符串
    你拿到的Order.OrderState是被JSON序列化过一次的字符串(原始JSON被当作字符串嵌入父JSON,所有特殊字符都被转义)。直接用JSON序列化器把它反序列化为普通字符串,就能自动处理所有转义规则(包括引号、换行、特殊符号等),得到原始的JSON内容。

  2. 清理换行并反序列化为目标类
    还原完成后,把JSON字符串中的换行符替换为空格(匹配你的目标格式),再反序列化为OrderState类。

代码示例(System.Text.Json)

// 第一步:还原嵌套的JSON字符串,自动处理所有转义
string rawJson = JsonSerializer.Deserialize<string>(Order.OrderState);
// 第二步:替换所有换行符为空格(兼容Windows和Unix换行)
string cleanedJson = rawJson.Replace("\n", " ").Replace("\r", "");
// 第三步:反序列化为自定义OrderState类
OrderState orderState = JsonSerializer.Deserialize<OrderState>(cleanedJson);

代码示例(Newtonsoft.Json)

如果使用Newtonsoft.Json,逻辑完全一致:

string rawJson = JsonConvert.DeserializeObject<string>(Order.OrderState);
string cleanedJson = rawJson.Replace("\n", " ").Replace("\r", "");
OrderState orderState = JsonConvert.DeserializeObject<OrderState>(cleanedJson);

为什么手动替换不可行?

JSON的转义规则包含多种场景:除了你提到的双引号和+,还有制表符\t、回车\r、斜杠\/、Unicode转义\uXXXX等。手动替换永远无法覆盖所有未知的转义情况,而JSON序列化器本身就是为处理这些规则设计的,能确保还原出正确的原始JSON结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 21:45:30