В настоящее время у меня есть объявление в корневом классе, которое выполняет итерацию по свойствам производного класса и создает экземпляр значения по умолчанию для свойства, используя дескриптор DefaultValueAttribute.То, что я хочу сделать, это расширить это от просто для DefaultValue, чтобы также быть XmlElement, XmlAttribute и серией атрибутов, включенных в сериализацию пространства имен Xml.
У меня проблема с расширением текущего дизайна дообрабатывать несколько атрибутов без загрузки тонны операторов if / then / else для обработки различных определенных атрибутов.
Текущий дизайн:
private void Initialize () {
foreach( PropertyDescriptor property in TypeDescriptor.GetProperties( this ) ) {
XmlElementAttribute xel = ( XmlElementAttribute ) property.Attributes[typeof( XmlElementAttribute )];
if( xel != null ) {
this.AddElement( xel.ElementName , "" );
}
DefaultValueAttribute attr = ( DefaultValueAttribute ) property.Attributes[typeof( DefaultValueAttribute )];
if( attr != null ) {
property.SetValue( this , attr.Value );
}
}
}
Предложения Дизайн:
private void Initialize () {
foreach( PropertyDescriptor property in TypeDescriptor.GetProperties( this ) ) {
foreach( Attribute attr in property.Attributes ) {
if( attr = typeof(XmlElementAttribute)){
//do something
}else if(attr = typeof(DefaultValueAttribute)){
//do something
}
}
}
}