Преобразование словаря используя Swagger DataType - PullRequest
0 голосов
/ 09 июля 2020

Используя swagger, на моей новой конечной точке я пытаюсь отправить через объект Dictionary со строкой и массивом строк, но каким-то образом каждый раз, когда мой ModelBinder пытается десериализовать его, мой массив строк преобразуется в строку с разделитель запятой.

{
  "additionalProp1": {
    "text": [
      "string"
    ]
  }
}

Я получаю {текст, строка} вместо {"текст": ["строка"]} Я пытался изменить свое чванство. json схему через настраиваемый класс BenefitSchemaFilter, но я не могу найти способ получить его правильным способом.

Вот мой код SchemaFilter:

public void Apply(OpenApiSchema schema, SchemaFilterContext context)
        {
            var type = context.Type;
            if (type == typeof(IDictionary<string, string[]>))
            {
                schema.AdditionalPropertiesAllowed = true;
                schema.AdditionalProperties.Type = "object";
                schema.AdditionalProperties.Properties = new Dictionary<string, OpenApiSchema>
                {
                    { "text", new OpenApiSchema { Type = "array", Items = new OpenApiSchema { Type = "string" } } }
                };
            }
        }

вот мой код привязки:

public Task BindModelAsync(
            ModelBindingContext bindingContext)
        {
            if (bindingContext.ModelType != typeof(IDictionary<string, string[]>) ||
                bindingContext.ModelType == null)
            {
                return Task.CompletedTask;
            }

            var modelName = !string.IsNullOrEmpty(bindingContext.ModelName) ? bindingContext.ModelName : bindingContext.FieldName;

            var val = bindingContext.ValueProvider.GetValue(modelName);

            var key = val.FirstValue;
            if (key == null)
            {
                bindingContext.ModelState.AddModelError(modelName, "Wrong value type");
                return Task.CompletedTask;
            }

            try
            {
                bindingContext.Result = ModelBindingResult.Success(JsonConvert.DeserializeObject<IDictionary<string, string[]>>(val.FirstValue));
            }
            catch (JsonSerializationException)
            {
                return Task.CompletedTask;
            }

            return Task.CompletedTask;
        }

Может ли кто-нибудь помочь мне решить эту проблему? Большое спасибо.

...