字典返回类型的 Swagger 示例响应

问题描述 投票:0回答:1

我有一个 C# asp.net API,它有一个返回字典的端点(适用于所有字典返回)

在 swagger 上查看时,响应示例显示为 {}。

Swagger

我尝试在我的控制器方法上使用以下属性

[SwaggerResponse(System.Net.HttpStatusCode.OK, Type = typeof(List<Door>))]  [ProducesResponseType(typeof(List<Door>), 200)]
[ResponseType(typeof(IEnumerable<Country>))]

控制器方法

    /// <summary>
    /// Retrieves a Dictionary of key-value pairs of Property ids and Property descriptions
    /// </summary>
    /// <param name="x">Test.</param>
    /// <param name="y">Example.</param>
    /// <returns>Dictionary of PropertyId, Property Description pairs</returns>
    /// <remarks>Excludes Properties that the user is restricted from</remarks>
    [Route("Test/{x}/{y}")]
    [HttpGet]
    public Dictionary<int, string> Test(bool x, bool y)
    {
        return propertiesService.GetPropertyList(x, y);
    }
c# asp.net api swagger swagger-ui
1个回答
0
投票

按照惯例,字典被编码为 JSON 对象,即序列化器(System.Text.Json 或 Newtonsoft Json.NET)将在单个对象中转换字典,例如:

[HttpGet("GetDict")]
public async Task<ActionResult<Dictionary<int, string>>> GetDict()
{
    return new Dictionary<int, string>
    {
        {42, "foo"},
        {777, "bar"},
    };
}

将导致以下结果:

{"42":"foo","777":"bar"}

由于属性的动态名称,这基本上是无模式的。您需要使用其他一些返回类型。例如,您可以将字典视为

KeyValuePair
s 的集合:

[HttpGet("GetDict")]
public async Task<IEnumerable<KeyValuePair<int, string>>> GetDict()
{
    return new Dictionary<int, string>
    {
        { 42, "foo" },
        { 777, "bar" },
    }.ToArray();
}

结果是:

[{"key":42,"value":"foo"},{"key":777,"value":"bar"}]

这是一个包含 2 个字段(

key
value
)的 JSON 对象数组,并且可以有一个模式。

© www.soinside.com 2019 - 2024. All rights reserved.