SwaggerUI 5.0.0 игнорирует имя JsonProperty - PullRequest
3 голосов
/ 17 февраля 2020

Недавно я обновил 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 теперь игнорирует имена атрибутов JtonsProperty Newtonsoft / JSON. NET в свойствах DTO. Например:

[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.

Для Swagger в Startup.cs ConfigureServices у меня сейчас есть:

services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo
    {
        Version = "v1",
        Title = "My API",
    });

    c.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"));
});

А для Swagger в Startup.cs Configure у меня сейчас есть:

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 Core?

1 Ответ

8 голосов
/ 18 февраля 2020

Похоже, что полная поддержка NewtonSoft JSON. net от версии 5.0.0 Swashbuckle / Swagger предоставляется через отдельный пакет.

Чтобы это заработало:

1) Установите пакет nuget Swashbuckle.AspNetCore.Newtonsoft версия 5.0.0 +

2) В Startup.ConfigureServices () выполните вызов для поддержка:

services.AddSwaggerGenNewtonsoftSupport();

Дополнительную информацию можно найти здесь .

...