Привязка пользовательской модели устанавливает для дочернего свойства значение null

#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, значение свойства коллекции участников всегда равно нулю, в то время как другие свойства сопоставляются без каких-либо проблем. Любая помощь будет признательна. Спасибо.