+2007-05-15 Marek Habersack <mhabersack@novell.com>
+
+ * ConfigurationElement.cs: added value validation on
+ deserialization from the config file.
+
2007-05-14 Igor Zelmanovich <igorz@mainsoft.com>
* ConfigurationElement.cs: when attribute value cannot be parsed,
if (readProps.ContainsKey (prop))
throw new ConfigurationException ("The attribute '" + prop.Name + "' may only appear once in this element.");
-
+
+ string value = null;
try {
- prop.SetStringValue (reader.Value);
- }
- catch (Exception ex) {
+ value = reader.Value;
+ ValidateValue (prop.Property, value);
+ prop.SetStringValue (value);
+ } catch (ConfigurationErrorsException) {
+ throw;
+ } catch (ConfigurationException) {
+ throw;
+ } catch (Exception ex) {
string msg = String.Format ("The value of the property '{0}' cannot be parsed.", prop.Name);
throw new ConfigurationErrorsException (msg, reader);
}
reader.MoveToElement ();
if (reader.IsEmptyElement) {
reader.Skip ();
- }
- else {
-
+ } else {
int depth = reader.Depth;
reader.ReadStartElement ();
PropertyInformation info = ElementInformation.Properties [propName];
return info != null && info.ValueOrigin == PropertyValueOrigin.SetHere;
}
+
+ void ValidateValue (ConfigurationProperty p, string value)
+ {
+ ConfigurationValidatorBase validator;
+ if (p == null || (validator = p.Validator) == null)
+ return;
+
+ if (!validator.CanValidate (p.Type))
+ throw new ConfigurationException (
+ String.Format ("Validator does not support type {0}", p.Type));
+ validator.Validate (p.ConvertFromString (value));
+ }
}
internal class ElementMap