public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var dbModelType = objectType.GetGenericArguments()[0]; var shortId = reader.Value as string; var outputType = typeof(RavenId <>).MakeGenericType(dbModelType); return(Activator.CreateInstance(outputType, IdHelper.ForModel(dbModelType, shortId))); }
public Task BindModelAsync(ModelBindingContext bindingContext) { if (bindingContext == null) { throw new ArgumentNullException(nameof(bindingContext)); } var modelName = bindingContext.ModelName; var valueProviderResult = bindingContext.ValueProvider.GetValue(modelName); bindingContext.ModelState.SetModelValue(modelName, valueProviderResult); var value = valueProviderResult.FirstValue; if (string.IsNullOrEmpty(value)) { return(Task.CompletedTask); } if (!int.TryParse(value, out var id)) { bindingContext.ModelState.TryAddModelError( modelName, "Id must be an integer."); return(Task.CompletedTask); } var dbModelType = bindingContext.ModelType.GetGenericArguments()[0]; var outputModelType = typeof(RavenId <>).MakeGenericType(dbModelType); var model = Activator.CreateInstance(outputModelType, IdHelper.ForModel(dbModelType, value)); bindingContext.Result = ModelBindingResult.Success(model); return(Task.CompletedTask); }