【问题标题】:Swashbuckle.AspNetCore (5.0.0-rc5) ignoring public fieldsSwashbuckle.AspNetCore (5.0.0-rc5) 忽略公共字段
【发布时间】:2020-01-11 00:23:10
【问题描述】:

首先,这在 Swashbuckle.AspNetCore v4 中运行良好。 所以给定这个模型和端点;

public class TestRequest
{
    public string test1 { get; set; }
    public string test2;
}

[HttpPost]
public void Post([FromBody] TestRequest value)
{
}

Swagger 只显示;

{
  "test1": "string"
}

作为示例 TestRequest 值。

现在是这种行为吗? 无论如何通过设置或过滤器来改变这个? 我有大量只使用字段的导入服务。 (由 dotnet-svcutil 生成,很常见)

【问题讨论】:

  • 您的test1 是一个财产。您的 test2 是一个字段。 Swashbuckle 只显示属性
  • 所以 Swashbuckle v4 显示了字段和属性,但 v5 只显示了属性?有没有关于这种新行为的链接可以分享?
  • 我不知道。我读了您的问题 “Swashbuckle (5.0.0-rc5) ignoring public properties without getter/setter” 并回答说:“其中一个是字段而不是属性”。 Swashbuckle 是非常可配置的。默认值可能已更改。去找启动/配置代码,看看能不能改一下。
  • 好吧,我花了一天的时间试图弄清楚,还要多久才能在这里问这个问题?我希望这个问题会被广泛传播,因为 aspnet core 3.1 要求您使用 Swashbuckle v5 RC。在这一点上,我什至不知道这是一个错误还是有意的。
  • 我的意思是,您的问题确实应该以指出 v4(在 .NET vN(对于某些 N)上)记录公共 fields 和公共 properties 的方式来表述,但是.NET Core 3.1 上的 v5rc 仅记录 properties。让“getter and setter”离开那里。询问是否有需要设置的配置

标签: c# swagger swashbuckle


【解决方案1】:

好的,我自己根据@Flydog57 的建议来解决这个问题,我发现新的 Swashbuckle.AspNetCore 正在使用 MS json.net 而不是 Newtonsoft。

所以在 https://github.com/domaindrivendev/Swashbuckle.AspNetCore 第十次阅读 git 自述文件

我发现有一种方法可以将 json 序列化程序恢复为 Newtonsoft。 首先(从 5.0.0-rc5 版本开始)安装这个包;

Install-Package Swashbuckle.AspNetCore.Newtonsoft -Version 5.0.0-rc5

然后在 Start.ConfigureServices 中告诉 Swashbuckle 使用 by;

services.AddSwaggerGenNewtonsoftSupport();

现在您会发现所有那些公开的“字段”都重新出现在您的招摇页面中。

更新:.Net 5+ 在 JsonSerializerOptions 类中有一个“IncludeFields”选项。

https://docs.microsoft.com/en-us/dotnet/api/system.text.json.jsonserializeroptions.includefields?view=net-5.0

现在很轻松。

【讨论】:

    最近更新 更多