首页 > 解决方案 > 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));

标签: c#swagger

解决方案


原来这是 NSwag 版本 13.2.0.0 中的一个错误

https://github.com/RicoSuter/NSwag/issues/2596

临时修复是添加

[Produces("application/json")]

到您的 API 控制器


推荐阅读