public void Valid_values_case_sensitive(string value) { var untypedValidator = new EnumValidator(typeof(DayOfWeek), ignoreCase: false); var typedValidator = new EnumValidator <DayOfWeek>(ignoreCase: false); Should.NotThrow(() => untypedValidator.Validate(value)); Should.NotThrow(() => typedValidator.Validate(value)); }
public void Invalid_values(string value) { var untypedValidator = new EnumValidator(typeof(DayOfWeek)); var typedValidator = new EnumValidator <DayOfWeek>(); Should.Throw <ValidationException>(() => untypedValidator.Validate(value)); Should.Throw <ValidationException>(() => typedValidator.Validate(value)); }
public void Valid_values(string value) { var untypedValidator = new EnumValidator(typeof(DayOfWeek)); var typedValidator = new EnumValidator <DayOfWeek>(); Should.NotThrow(() => untypedValidator.Validate(value)); Should.NotThrow(() => typedValidator.Validate(value)); }
public Task BindModelAsync(ModelBindingContext bindingContext) { var valueProviderResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); if (valueProviderResult == ValueProviderResult.None) { return(Task.CompletedTask); } bindingContext.ModelState.SetModelValue(bindingContext.ModelName, valueProviderResult); System.Reflection.PropertyInfo propInfo = bindingContext.ModelMetadata.ContainerType.GetProperty(bindingContext.ModelMetadata.PropertyName); if (propInfo == null) { return(Task.CompletedTask); } var attribute = propInfo.GetCustomAttributes(typeof(OnlyEnumAttribute), false).FirstOrDefault() as OnlyEnumAttribute; if (attribute == null) { return(Task.CompletedTask); } if (!EnumValidator.Validate(attribute.EnumType, valueProviderResult.ToString(), out object parsedEnum)) { bindingContext.ModelState.TryAddModelError(bindingContext.ModelName, string.Format("Object \"{0}\" of type {1} is not a {2} type", valueProviderResult.ToString(), "String", attribute.EnumType.Name)); } else { if (propInfo.PropertyType == typeof(string)) { bindingContext.Result = ModelBindingResult.Success(parsedEnum.ToString()); } else if (propInfo.PropertyType == typeof(int) || Nullable.GetUnderlyingType(propInfo.PropertyType) == typeof(int)) { bindingContext.Result = ModelBindingResult.Success((int)parsedEnum); } else if (propInfo.PropertyType == attribute.EnumType || Nullable.GetUnderlyingType(propInfo.PropertyType) == attribute.EnumType) { bindingContext.Result = ModelBindingResult.Success(parsedEnum); } else { bindingContext.ModelState.TryAddModelError(bindingContext.ModelName, string.Format("Parameter of type {0} must be declared as an Integer, String or {1} type.", propInfo.PropertyType.Name, attribute.EnumType.Name)); } } return(Task.CompletedTask); }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.String || reader.TokenType == JsonToken.Integer) { if (objectType == typeof(string)) { if (EnumValidator.Validate(conversionType, reader.Value.ToString(), out object parsedEnum)) { var newReader = CreateJsonReader("'" + parsedEnum.ToString() + "'"); return(defaultSerializer.Deserialize(newReader, objectType)); } } else if (objectType == typeof(int) || Nullable.GetUnderlyingType(objectType) == typeof(int)) { if (EnumValidator.Validate(conversionType, reader.Value.ToString(), out object parsedEnum)) { var newReader = CreateJsonReader(((int)parsedEnum).ToString()); return(defaultSerializer.Deserialize(newReader, objectType)); } } else if (objectType == this.conversionType || Nullable.GetUnderlyingType(objectType) == this.conversionType) { if (EnumValidator.Validate(conversionType, reader.Value.ToString(), out object parsedEnum)) { var newReader = CreateJsonReader(((int)parsedEnum).ToString()); return(defaultSerializer.Deserialize(newReader, objectType)); } } else { throw new JsonSerializationException(string.Format("Parameter of type {0} must be declared as an Integer, String or {1} type.", objectType.Name, conversionType.Name)); } } throw new JsonSerializationException(string.Format("Object \"{0}\" is not a valid {1} value.", reader.Value, conversionType.Name)); }