8.5JSON 序列化配置

框架默认采用 System.Text.Json 处理 HTTP 请求的 JSON 序列化,支持以下配置方式:

框架默认采用 System.Text.Json 处理 HTTP 请求的 JSON 序列化,支持以下配置方式:

  • 全局默认配置

通过 HttpRemoteOptions 为所有 HttpClient 设置统一的 JSON 序列化行为:

cs
services.AddHttpRemote(builder => {})    .ConfigureOptions(options =>    // 或使用重载:.ConfigureOptions((options, serviceProvider) =>    {        options.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull;    });
  • 客户端级配置(优先级更高)

当同时存在全局配置和客户端级配置时,框架会优先采用客户端级配置:

cs
// 配置默认客户端services.AddHttpClient(string.Empty)    .ConfigureOptions(options =>    // 或使用重载:.ConfigureOptions((options, serviceProvider) =>    {        options.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull;    });// 配置特定客户端services.AddHttpClient("furion")    .ConfigureOptions(options =>    // 或使用重载:.ConfigureOptions((options, serviceProvider) =>    {        options.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull;    });

使用示例:

cs
var model = await httpRemoteService.SendAsAsync<YourModel>(HttpRequestBuilder.Get("https://furion.net/test-json")    .SetHttpClientName("furion"));  // 不设置默认为 string.Empty
  • 手动处理(完全控制)

当需要特殊处理时可直接操作原始响应:

cs
var jsonString = await httpRemoteService.GetAsStringAsync("https://furion.net/test-json");var model = JsonSerializer.Deserialize<YourModel>(jsonString, new JsonSerializerOptions());

如果您希望替换框架默认的 System.Text.Json 序列化提供程序,例如使用 Newtonsoft.Json 来提供 JSON 序列化配置选项,那么您可以通过实现 IHttpContentProcessor 接口来满足这一自定义需求。