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

.NET 5迁移后JsonSerializer自定义转换器异常被封装原因咨询

异常行为变化原因

你观察到的异常封装是.NET 5 对 System.Text.Json 的官方迭代导致的:

  • .NET Core 3.1 版本中,自定义 JsonConverter 内部抛出的异常会直接向上透传,JsonSerializer 不会做二次封装。
  • 从 .NET 5 开始,微软为了提升反序列化错误的可调试性,新增了异常上下文附加逻辑:当自定义转换器内部抛出异常时,JsonSerializer 会将用户主动抛出的原始异常作为 InnerException,外层新抛出的同类型异常会自动拼接反序列化上下文信息,包括当前反序列化的成员类型、JSON路径、出错行号、字节偏移量等,方便开发者快速定位JSON中具体的错误位置。你捕获到的外层异常栈中调用的 ThrowHelper.ThrowNotSupportedException 就是负责实现这个封装逻辑的。

单元测试适配方案(可选参考)

你可以二选一修改测试逻辑:

  1. 直接匹配原始异常内容:将 catch 块的错误赋值改为取内层异常消息
catch (Exception ex)
{
    error = ex.InnerException?.Message ?? ex.Message;
}
  1. 模糊匹配外层异常:不需要完全匹配整个异常文本,只需判断外层异常是否包含预期的原始错误内容
Assert.Contains(errorExpected, error);

内容的提问来源于stack exchange,提问作者Clément

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 19:24:01