///<summary>Constructor accepting the property to check</summary>
 public ValidatingSerializerEventArgs(IValidatingSerializer Checking, object O, string Name)
 {
     Check         = O;
     Value         = (O == null)?"":O.ToString();
     Field         = Name;
     this.Checking = Checking;
 }
 /// <summary>Calls basic Validator and bubbles errors up to V.</summary>
 public static void Validate(IValidatingSerializer I, IValidatingSerializer V, string PropertyName)
 {
     I.Validate();
     if (I.Errors != null)
     {
         V.Errors = I.Errors.Bubble(V.Errors, PropertyName);
     }
     I.Errors = null;
 }
 /// <summary>
 /// If E is not null, first checks to see if Errors is null and initializes it,
 /// then adds e to the collection.
 /// </summary>
 public static void AddError(IValidatingSerializer I, ErrorInfo E)
 {
     if (E == null)
     {
         return;
     }
     if (I.Errors == null)
     {
         I.Errors = new ArrayOfErrorInfo();
     }
     I.Errors.Add(E);
 }
        /// <summary>Loops through the Validator attributes provided.</summary>
        public static void Validate(IValidatingSerializer I, MemberInfo M, ValidatingSerializerEventArgs e)
        {
            ArrayList V = new ArrayList();

            V.AddRange(M.GetCustomAttributes(typeof(ValidatorAttribute), true));
            V.Sort();
            foreach (ValidatorAttribute A in V)
            {
                A.OnValidate(e);
                I.AddError(e.Error);
                if (I.Errors != null && I.Errors.Count > 0)
                {
                    break;
                }
            }
        }
 ///<summary>Constructor accepting the Validator to check</summary>
 public ValidatingSerializerEventArgs(IValidatingSerializer Checking) : this(Checking, Checking, "")
 {
 }
 /// <summary>Calls basic Validator and bubbles errors up to V.</summary>
 public void Validate(IValidatingSerializer V, string PropertyName)
 {
     IVS.Validate(this, V, PropertyName);
 }