首页 > 解决方案 > Swagger 没有从其他项目中找到 XML 和 DataAnnotations

问题描述

我正在旧版 Web 应用程序中将 SOAP API 转换为 REST。

我从一个 webapi 项目(C#)开始——用 swagger 和 swashbuckle 设置它。我为此添加了端点,并用 XML 注释进行了注释。这是使用完整的框架,而不是 .NET Core。

注释都按预期出现在 swagger-ui 中(XML 文档生成工作正常,文件由 swagger 通过配置拾取)。

该项目引用了旧的 SOAP API 类(用 VB.NET 编写)。我已经尝试用RequiredAttribute(例如)注释这些类并向它们添加 XML 注释,但是这些在 swagger-ui 中根本没有出现。它们设置在一个非常浅的类层次结构中(它们都继承自的基类 - 为了完整性,我将这些信息包括在内)。

这些其他 VB.NET 项目确实启用了 XML 文档,并且我看到 XML 文件以及我在 webapi 项目 bin 目录中添加的文档,正如预期的那样。我已将这些添加到 swagger 配置中,并且我相信它们已正确加载(因为加载页面时没有异常)。

但是 - swagger-ui 中的模型都没有显示DataAnnotation我添加的任何属性或这些 VB.NET 项目中的任何 XML 文档。

我想让它们出现,并将它们列在 swagger-ui 的 Modles 部分(目前不存在)。

我错过了什么?


更新:

我使用测试模型对外部库(C#,完整框架)进行了一些测试。

这正如预期的那样工作 -DataAnnotation发现 XML 文档和属性并在 swagger-ui 上显示没有问题。

我现在怀疑 VB.NET,尽管这可能是 VB.NET 项目是 WCF 项目的问题。


更新:

对一个新的 VB.NET 类库和一切都做了同样的工作™,所以......可能是类层次结构或这些其他 VB 项目的东西(可能不是简单的类库或其他东西在路上)。


更新:

这不是继承体系。

标签: asp.net-web-apiswaggerswagger-uiswashbuckle

解决方案


原来 VB.NET 类都标有旧的SerializableAttribute.

这会导致模型在 swagger-ui 中看起来完全不同,因此所有注释(DataAnnotation属性和 XML 注释)都无法正常工作。

这也导致所有属性在它们的名字前加上下划线(我也很好奇,忘了在我的问题中提及)。


为了解决我的实际问题,我在这个 GitHub 问题上找到了解决方案。

即,确保使用正确的 JSON 格式化程序(在 中Global.asax.cs):

GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new DefaultContractResolver();

推荐阅读