#c# #model-binding
Вопрос:
У меня возникли проблемы с использованием пользовательского связывателя моделей, который я создал при чтении документации MSDN для привязки полиморфной модели.
У меня есть конечная точка WebAPI, принимающая такой аргумент:
public ActionResult([ModelBinder(BinderType = typeof(ProductionModelBinder))] ProductionDto productionDto)
Допустим, у Dto есть структура, аналогичная этой:
public abstract class ProductionDto { public string Summary { get; set; } public ICollectionlt;intgt; Countries { get; set; } public ICollectionlt;ParticipantRoleDtogt; Participants { get; set; } }
Поставщик связующего выглядит следующим образом:
public IModelBinder GetBinder(ModelBinderProviderContext context) { if (context.Metadata.ModelType != typeof(ProductionDto)) { return null; } var subclasses = new[] { typeof(MovieDto), typeof(TVShowDto), }; var binders = new Dictionarylt;Type, (ModelMetadata, IModelBinder)gt;(); foreach (var type in subclasses) { var modelMetadata = context.MetadataProvider.GetMetadataForType(type); binders[type] = (modelMetadata, context.CreateBinder(modelMetadata)); } return new ProductionModelBinder(binders); }
И важная часть самого связующего, как это:
public async Task BindModelAsync(ModelBindingContext bindingContext) { var modelKindName = ModelNames.CreatePropertyModelName(bindingContext.ModelName, nameof(ProductionDto.Type)); var modelTypeValue = Convert.ToInt16(bindingContext.ValueProvider.GetValue(modelKindName).FirstValue); IModelBinder modelBinder; ModelMetadata modelMetadata; if (modelTypeValue == (int)ProductionType.Movie) { (modelMetadata, modelBinder) = binders[typeof(MovieDto)]; } else if (modelTypeValue == (int)ProductionType.TVShow) { (modelMetadata, modelBinder) = binders[typeof(TVShowDto)]; } else { bindingContext.Result = ModelBindingResult.Failed(); return; }
Проблема, которую я не могу решить, заключается в том, что независимо от структуры входных данных JSON, значение свойства коллекции участников всегда равно нулю, в то время как другие свойства сопоставляются без каких-либо проблем. Любая помощь будет признательна. Спасибо.