Используя 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;
}
Может ли кто-нибудь помочь мне решить эту проблему? Большое спасибо.