我有一个.Net Core 2.2 OData API,我正在努力实现Swagger文档 .

我一直在关注这个例子:https://github.com/Microsoft/aspnet-api-versioning/tree/master/samples/aspnetcore/SwaggerODataSample

我已经做到了这一点 . 现在我面临一个问题,我的模型以循环方式相互引用,让我解释一下:

注意:我使用EFCore Code第一种方法处理我的数据库 .

我有这些模型(作为示例):Project,ProjectLocation,ProjectRegion . 让我们称他们为A,B&C以保持简短 .

A如此引用B&C:

public virtual ICollection<X> X{ get; set; }

并且B&C都直接引用A:

public A A{ get; set; }

这都是非常标准的关系数据库模型的东西,但似乎SwaggerUI无法处理这个问题 .

我得到的错误如下:

无法加载API定义 . 错误:获取错误:内部服务器错误/swagger/v1/swagger.json处理请求时发生未处理的异常 . TypeLoadException:无法从程序集“Tc2fc56a7babe40419a678a075439246c.DynamicModels,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null”加载类型“NCCRD.Services.DataV2.Database.Models.ProjectLocation” .

System.Signature.GetSignature(Void * pCorSig,int cCorSig,RuntimeFieldHandleInternal fieldHandle,IRuntimeMethodInfo methodHandle,RuntimeType declaringType)

如果需要,还可以使用堆栈跟踪 .

我已经阅读了这两篇文章和所有参考链接,但我没有找到有效的解决方案:

https://github.com/swagger-api/swagger-codegen/issues/741

https://github.com/swagger-api/swagger-codegen/issues/728

一旦看起来很好的解决方案是这样的:https://systemout.net/2017/04/07/swagger-asp-net-core-fixing-circular-self-references/,但这也没有效果 . (我也联系了作者寻求帮助)

我从B或C中删除对A的引用的那一刻,然后SwaggerUI加载正常 .

如果有人能对此有所了解,我会非常感激 . 在此先感谢您提供的任何帮助 .