using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
public static void Main()
public static void InvalidMissingValue()
ReaderSetting readerSetting = new() { RfidAddress = "" };
EntityValidator<ReaderSetting> validator = new EntityValidator<ReaderSetting>();
var result = validator.Validate(readerSetting);
Console.WriteLine($"{nameof(InvalidMissingValue)} {(result.IsValid ? "Yes" : "No")}");
result.Errors.ToList().ForEach(x => Console.WriteLine(x.ErrorMessage));
public static void AddressTooLong()
ReaderSetting readerSetting = new() { RfidAddress = "some value" };
EntityValidator<ReaderSetting> validator = new EntityValidator<ReaderSetting>();
var result = validator.Validate(readerSetting);
Console.WriteLine($"{nameof(AddressTooLong)} {(result.IsValid ? "Yes" : "No")}");
result.Errors.ToList().ForEach(x => Console.WriteLine(x.ErrorMessage));
public static void Valid()
ReaderSetting readerSetting = new() { RfidAddress = "abc" };
EntityValidator<ReaderSetting> validator = new EntityValidator<ReaderSetting>();
var result = validator.Validate(readerSetting);
Console.WriteLine($"{nameof(Valid)} {(result.IsValid ? "Yes" : "No")}");
result.Errors.ToList().ForEach(x => Console.WriteLine(x.ErrorMessage));
public class ReaderSetting
[Required(AllowEmptyStrings = false, ErrorMessage = "RFID Address is required.")]
[StringLength(3, ErrorMessage = "Max Length is 3")]
public string RfidAddress { get; set; }
public class EntityValidationResult
public IList<ValidationResult> Errors { get; set; }
public bool IsValid => Errors.Count == 0;
public EntityValidationResult(IList<ValidationResult> errors = null)
Errors = errors ?? new List<ValidationResult>();
public class EntityValidator<T> where T : class
public EntityValidationResult Validate(T entity)
var validationResults = new List<ValidationResult>();
var vc = new ValidationContext(entity, null, null);
Validator.TryValidateObject(entity, vc, validationResults, true);
return new EntityValidationResult(validationResults);