.NET 5迁移后JsonSerializer自定义转换器异常被封装原因咨询
异常行为变化原因
你观察到的异常封装是.NET 5 对 System.Text.Json 的官方迭代导致的:
- .NET Core 3.1 版本中,自定义
JsonConverter内部抛出的异常会直接向上透传,JsonSerializer不会做二次封装。 - 从 .NET 5 开始,微软为了提升反序列化错误的可调试性,新增了异常上下文附加逻辑:当自定义转换器内部抛出异常时,
JsonSerializer会将用户主动抛出的原始异常作为InnerException,外层新抛出的同类型异常会自动拼接反序列化上下文信息,包括当前反序列化的成员类型、JSON路径、出错行号、字节偏移量等,方便开发者快速定位JSON中具体的错误位置。你捕获到的外层异常栈中调用的ThrowHelper.ThrowNotSupportedException就是负责实现这个封装逻辑的。
单元测试适配方案(可选参考)
你可以二选一修改测试逻辑:
- 直接匹配原始异常内容:将 catch 块的错误赋值改为取内层异常消息
catch (Exception ex) { error = ex.InnerException?.Message ?? ex.Message; }
- 模糊匹配外层异常:不需要完全匹配整个异常文本,只需判断外层异常是否包含预期的原始错误内容
Assert.Contains(errorExpected, error);
内容的提问来源于stack exchange,提问作者Clément
相关产品推荐
相关产品推荐

