SwaggerUI 5.0.0 忽略 JsonProperty 名称
SwaggerUI 5.0.0 ignoring JsonProperty name
我最近将 ASP.NET Core API 应用程序升级到 Swashbuckle/Swagger 5.0.0 和 ASP.NET Core 3.1。
<PackageReference Include="Swashbuckle.AspNetCore" Version="5.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore.Swagger" Version="5.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="5.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerUI" Version="5.0.0" />
但是,这样做后我注意到 Swagger UI 现在忽略了 DTO 属性上的 Newtonsoft/JSON.NET JsonProperty 属性名称。例如:
[HttpGet("testget", Name = "testget")]
[ProducesResponseType(StatusCodes.Status200OK)]
public ActionResult<TestGetResponse> TestGet()
{
var response = new TestGetResponse { MyName = "John" };
return Ok(response);
}
public class TestGetResponse
{
[JsonProperty("name")]
public string MyName { get; set; }
}
在 Swagger UI 中输出为:
代码 200:
示例值
Model
{
"myName": "string"
}
而不是模型 属性 名称 name
。
对于 Startup.cs ConfigureServices 中的 Swagger,我目前有:
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo
{
Version = "v1",
Title = "My API",
});
c.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"));
});
对于 Startup.cs 中的 Swagger 配置,我目前有:
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API");
c.RoutePrefix = "swagger";
});
我知道,如果我改用 System.Text.Json
属性 JsonPropertyName
,这将得到修复,但我现在需要坚持使用原始属性。
Start.cs 中是否有设置告诉 SwaggerUI 使用 Newtonsoft JsonProperty 属性,或者我需要在 ASP.NET 核心配置级别更改某些内容?
Swashbuckle/Swagger 5.0.0 版对 NewtonSoft JSON.net 的全面支持似乎是通过单独的软件包提供的。
要使其正常工作:
1) 安装nuget包Swashbuckle.AspNetCore.Newtonsoft
版本5.0.0+
2) 在 Startup.ConfigureServices() 中呼叫支持:
services.AddSwaggerGenNewtonsoftSupport();
可以找到更多信息 here。
我最近将 ASP.NET Core API 应用程序升级到 Swashbuckle/Swagger 5.0.0 和 ASP.NET Core 3.1。
<PackageReference Include="Swashbuckle.AspNetCore" Version="5.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore.Swagger" Version="5.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="5.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerUI" Version="5.0.0" />
但是,这样做后我注意到 Swagger UI 现在忽略了 DTO 属性上的 Newtonsoft/JSON.NET JsonProperty 属性名称。例如:
[HttpGet("testget", Name = "testget")]
[ProducesResponseType(StatusCodes.Status200OK)]
public ActionResult<TestGetResponse> TestGet()
{
var response = new TestGetResponse { MyName = "John" };
return Ok(response);
}
public class TestGetResponse
{
[JsonProperty("name")]
public string MyName { get; set; }
}
在 Swagger UI 中输出为:
代码 200: 示例值
Model
{
"myName": "string"
}
而不是模型 属性 名称 name
。
对于 Startup.cs ConfigureServices 中的 Swagger,我目前有:
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo
{
Version = "v1",
Title = "My API",
});
c.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"));
});
对于 Startup.cs 中的 Swagger 配置,我目前有:
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API");
c.RoutePrefix = "swagger";
});
我知道,如果我改用 System.Text.Json
属性 JsonPropertyName
,这将得到修复,但我现在需要坚持使用原始属性。
Start.cs 中是否有设置告诉 SwaggerUI 使用 Newtonsoft JsonProperty 属性,或者我需要在 ASP.NET 核心配置级别更改某些内容?
Swashbuckle/Swagger 5.0.0 版对 NewtonSoft JSON.net 的全面支持似乎是通过单独的软件包提供的。
要使其正常工作:
1) 安装nuget包Swashbuckle.AspNetCore.Newtonsoft
版本5.0.0+
2) 在 Startup.ConfigureServices() 中呼叫支持:
services.AddSwaggerGenNewtonsoftSupport();
可以找到更多信息 here。