Swagger 未从其他项目中找到 XML 和 DataAnnotations

Swagger not finding XML and DataAnnotations from other projects

我正在将遗留 Web 应用程序中的 SOAP API 转换为 REST。

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

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

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

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

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

我想让它们出现并在 swagger-ui 的模块部分中列出它们(此时不存在)。

我错过了什么?


更新:

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

这刚刚按预期工作 - XML 文档和 DataAnnotation 属性被发现并显示在 swagger 上 -ui 没有问题。

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


更新:

对新的 VB.NET class 库进行同样的操作,一切正常™,所以...可能是 class 层次结构或其他 VB项目(可能不简单 class 库或其他东西)。


更新:

这不是继承层次结构。

结果 VB.NET 类 都标有好旧的 SerializableAttribute

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

这也导致所有的属性在他们的名字前都带有下划线(我也很好奇,忘记在我的问题中提到)。


为了解决我的实际问题,我在 this GitHub issue.

上找到了解决方案

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

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