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

如何使用System.Text.Json正确反序列化包含HTML代码的JSON字段

解决方案

错误原因

报错的核心原因是你错误地将Body字段中提取的HTML内容直接传入了JsonSerializer.Deserialize<string>()方法。该方法要求输入参数是符合JSON语法的字符串(必须以双引号包裹、内部转义符合JSON规范),但HTML内容以<开头,不符合JSON结构,因此抛出解析异常。你之前配置的UnsafeRelaxedJsonEscaping属于序列化输出时的配置,对反序列化过程不生效,因此无法解决问题。

正确处理步骤

1. 先完整反序列化整个API返回的JSON

你需要先反序列化整个JSON结构,拿到Body字段的原始转义后的值,不要单独处理Body内容,有两种实现方式:

方式1:定义实体类反序列化(推荐)

首先定义对应JSON结构的实体类:

public class ApiResult
{
    public string Body { get; set; }
}

反序列化完整JSON字符串:

// fullJson 为调用REST API返回的完整JSON字符串
var apiResult = JsonSerializer.Deserialize<ApiResult>(fullJson);
string rawBodyContent = apiResult.Body;

方式2:动态解析(无需定义实体类)

如果不想额外定义实体类,可以用JsonNode动态解析:

// fullJson 为调用REST API返回的完整JSON字符串
JsonNode jsonNode = JsonNode.Parse(fullJson);
string rawBodyContent = jsonNode["Body"].GetValue<string>();

2. 清洗解码得到可用HTML

第一步拿到的rawBodyContent中可能还存在&quot;、&lt;这类HTML实体,直接用.NET内置的HTML解码器处理即可,也可以按需移除不需要的换行、制表符:

// 解码HTML实体
string validHtml = System.Net.WebUtility.HtmlDecode(rawBodyContent);

// 可选:移除多余的转义字符与空白符
validHtml = validHtml.Replace("\r", string.Empty)
                     .Replace("\n", string.Empty)
                     .Replace("\t", string.Empty)
                     .Trim();

处理后的validHtml就是可以直接使用的有效HTML代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 10:06:01