Если бы определить свойства, которые вам нужны таким образом:
<CustomFields>
<property name="setting1">hello</property>
<property name="setting2">world</property>
...
</CustomFields>
, тогда каждое «свойство» становится дочерним узлом для CustomFields, и ваши свойства теперь являются атрибутами / значениями для этих дочерних узлов, а не атрибутамиУзел CustomFields, как в первом примере.
Если у вас много свойств, и вы хотите установить их более элегантно, вот два варианта, которые можно рассмотреть:
1) Используйте следующую структуру для пользовательского раздела(слегка изменено):
<CustomFields>
<setting1 value="hello"/>
<setting2 value="world"/>
...
</CustomFields>
и следующий код для определения свойств, используемых для получения значений:
public class CustomFields: ConfigurationSection
{
[ConfigurationProperty("setting1")]
public PropertyElement Setting1
{
get
{
return (PropertyElement)this["setting1"];
}
set
{ this["setting1"] = value; }
}
[ConfigurationProperty("setting2")]
public PropertyElement Setting2
{
get
{
return (PropertyElement)this["setting2"];
}
set
{ this["setting2"] = value; }
}
}
public class PropertyElement : ConfigurationElement
{
[ConfigurationProperty("value", IsRequired = false)]
public String Value
{
get
{
return (String)this["value"];
}
set
{
this["value"] = value;
}
}
}
Затем для получения значений:
string setting1value = myCustomFields.Setting1.Value;
string setting2value = myCustomFields.Setting2.Value;
Подробнее см. Как: создать пользовательские разделы конфигурации с помощью ConfigurationSection на MSDN.
2) Использовать программный подход, а не полагаться на атрибуты и отражение, ConfigurationSection class или IConfigurationSectionHandler может использоваться в этом случае.В результате у вас будет доступ из кода к узлу xml, содержащему данные пользовательского раздела, и вы сможете загружать любые XML-структуры.