c# - WASM Swagger 无法反序列化响应正文
问题描述
我有一个 .net5 WASM 项目和单独的 API。
我使用 API Swagger Endpoint 和 VS2019“向导”在 WASM 中创建了一个“连接服务”。一切都完美编码。
调用第一个端点时,检索要在 WASM 中显示的数据时出现错误
System.InvalidCastException:从“System.String”到“Sherpr.OpsCalendar.WASM.SherprAPIService.CalendarViewModel”的无效转换
当我查看来自 Fiddler 中 API 的数据时,一切看起来都很好。
当我调试从 swagger 定义生成的代码时,它会遇到以下行:
var responseData_ = response_.Content == null ? null : await response_.Content.ReadAsStringAsync().ConfigureAwait(false);
我可以在 response_.Content _data 中看到 111,032 字节的数据
但是 responseData 返回一个 null ,这会导致我相信的反序列化问题。
我无法确定生成的代码是否错误或其他原因。
任何人都可以解释一下吗?
这是连接服务向导生成的完整代码...
if (status_ == "200")
{
var responseData_ = response_.Content == null ? null : await response_.Content.ReadAsStringAsync().ConfigureAwait(false);
var result_ = default(CalendarViewModel);
try
{
result_ = (CalendarViewModel)System.Convert.ChangeType(responseData_, typeof(CalendarViewModel));
return result_;
}
catch (System.Exception exception_)
{
throw new SwaggerException("Could not deserialize the response body.", (int)response_.StatusCode, responseData_, headers_, exception_);
}
}
编辑:
经过进一步的测试...
jsonContent = await response_.Content.ReadAsStringAsync().ConfigureAwait(false);
这有效:
CalendarViewModel calendarViewModel1 = Newtonsoft.Json.JsonConvert.DeserializeObject<CalendarViewModel>(jsonContent);
这会将无效转换从“System.String”抛出到“Sherpr.OpsCalendar.WASM.SherprAPIService.CalendarViewModel:
CalendarViewModel calendarViewModel2 = (CalendarViewModel)System.Convert.ChangeType(jsonContent, typeof(CalendarViewModel));
解决方案
原来这是 NSwag 版本 13.2.0.0 中的一个错误
https://github.com/RicoSuter/NSwag/issues/2596
临时修复是添加
[Produces("application/json")]
到您的 API 控制器
推荐阅读
- python - Pandas:如何仅删除列末尾的最后一个连字符
- google-forms - 如何根据其他用户过去的回复使 Google 表单自动填充?
- c - 我知道一个地址,但我应该如何判断在哪个部分?使用C的全局区域或堆区域或堆栈区域
- json - 如何解决“手势 RangeError(索引)捕获的异常:无效值:有效值范围为空:0”
- c++ - 什么会使多边形算法中的点仅在正向和反向运行时才能正常工作?
- php - PHP:如何使用键->值对每两个分隔符将一个字符串分解为一个数组
- kubernetes - 将 GKE 集群拆除为“全新”状态而不删除它?
- scala - Spark——自定义reduce函数保存到磁盘然后上传到s3
- javascript - XMLHttpRequest 返回事件对象而不是实际数据
- fortran - Fortran 将未知大小的文件读入数组