NSwagStudio生成TypeScript客户端时string类型返回值反序列化错误求助
解决NSwag生成TypeScript客户端解析纯字符串响应报错的问题
针对你遇到的.NET Core 2.2 + NSwagStudio 13.16.1生成的TypeScript客户端对纯字符串响应执行JSON解析导致报错的问题,可通过以下几种方式解决:
方法1:调整API响应为合法JSON字符串
如果允许修改API代码,确保返回的字符串被包裹为合法的JSON字符串格式。例如,返回带双引号的字符串而非纯文本,这样JSON.parse就能正确解析,不会抛出错误。
修改后的API返回逻辑示例:
return BadRequest("\"Invalid input\""); // 用双引号包裹字符串,使其成为合法JSON结构
方法2:配置NSwagStudio跳过字符串类型的JSON解析
在NSwagStudio中调整TypeScript客户端生成配置,让生成器针对字符串类型响应直接返回原始文本,不执行JSON解析:
- 打开NSwagStudio并加载你的Swagger/OpenAPI文档
- 切换到TypeScript Client标签页
- 在Advanced设置区域,找到String Handling选项,设置为
Raw - 重新生成客户端代码,此时字符串类型的响应会直接使用
_responseText,不再调用JSON.parse
方法3:手动修改生成的客户端代码(临时方案)
如果暂时无法修改API或NSwag配置,可手动修改生成的代码,针对字符串类型的响应跳过JSON解析:
将生成代码中类似这样的逻辑:
result400 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as string;
修改为:
result400 = _responseText === "" ? null : _responseText as string;
注意:这种方法每次重新生成客户端代码都会被覆盖,仅作为临时应急方案。
问题原因说明
NSwag默认会将所有响应内容视为JSON格式处理,当API返回未被双引号包裹的纯字符串时,该内容不属于合法的JSON(合法JSON字符串必须被双引号包裹),因此JSON.parse会抛出语法错误。而[ProducesResponseType(typeof(string), StatusCodes.Status400BadRequest)]仅声明了响应类型为字符串,但并未约束响应内容必须是JSON格式的字符串,导致生成的客户端代码逻辑与实际响应不匹配。
内容的提问来源于stack exchange,提问作者Massimo Lavermicocca
相关产品推荐
相关产品推荐

