5.32响应 JSON 双重序列化处理

创建于 2026 年 8 月 17 日约 2 分钟读完

在与第三方 API 进行 HTTP 远程通信时,极少数情况下可能会遇到服务器返回的 JSON 数据被意外进行了双重序列化(有时也可能是刻意为之)。例如,本应返回 "{\"id\":1,\"name\":\"furion\"}",却因双重序列化变成了 "\"{\\\"id\\\":10, \\\"name\\\":\\\"furion\\\"}\""。针对这类情况,框架提供了解包支持。

HTTP 声明式请求通过 JsonResponseStringUnwrapAttribute 特性来启用 JSON 响应内容字符串的解包处理。相应的 HTTP 声明式提取器实现为 JsonResponseStringUnwrapDeclarativeExtractor 类型,该类型负责解析 JsonResponseStringUnwrapAttribute 特性并构建 HttpRequestBuilder 实例所需的启用 JSON 响应内容字符串的解包处理配置。

cs
// 在接口定义上应用,影响所有方法[JsonResponseStringUnwrap]public interface IHttpService : IHttpDeclarative{    // 默认自动应用    [Get("https://furion.net/")]    Task<YourModel> GetAsync();    // 在方法上应用    [JsonResponseStringUnwrap]  // 可显示启用(无需)    [Get("https://furion.net/")]    Task<YourModel> GetAsync();    [JsonResponseStringUnwrap(false)]   // 禁用 JSON 响应内容字符串的解包处理    [Get("https://furion.net/")]    Task<YourModel>> GetAsync();}

若需对特定请求禁用该功能,可设置 [JsonResponseStringUnwrap(false)] 特性。

JsonResponseStringUnwrapAttribute 包含以下构造函数和属性:

  • 构造函数

    • new():作用于方法或接口,启用 JSON 响应内容字符串的解包处理。
    • new(enabled):作用于方法或接口,设置是否启用 JSON 响应内容字符串的解包处理。
  • 属性

    • Enabled:是否启用(bool 类型),默认值为 true(启用)。