Нераспознанный элемент "Элемент" в конфигурационном файле с пользовательским разделом конфигурации
У меня есть пользовательский конфиг, который основан на некоторых классах. Моя проблема в том, что я получаю сообщение о том, что элемент конфигурации не распознан. Класс выглядит следующим образом:
[ConfigurationCollection(typeof(SectionItem), AddItemName = "Item", CollectionType = ConfigurationElementCollectionType.BasicMap)]
public class Sections : ConfigurationElementCollection
{
public SectionItem this[int index]
{
get { return BaseGet(index) as SectionItem; }
set
{
if (BaseGet(index) != null)
{
BaseRemoveAt(index);
}
BaseAdd(index, value);
}
}
public new SectionItem this[string response]
{
get { return (SectionItem)BaseGet(response); }
set
{
if (BaseGet(response) != null)
{
BaseRemoveAt(BaseIndexOf(BaseGet(response)));
}
BaseAdd(value);
}
}
protected override ConfigurationElement CreateNewElement()
{
return new SectionItem();
}
protected override object GetElementKey(ConfigurationElement element)
{
return ((SectionItem)element).Key;
}
}
И SectionItem
учебный класс:
public class SectionItem : ConfigurationElement
{
[ConfigurationProperty("key", IsRequired = true, IsKey = true)]
public string Key
{
get { return this["key"] as string; }
}
}
Если я добавлю свойство конфигурации типа SectionItems
в Sections
класс, который не будет работать для меня, потому что я хочу иметь несколько SectonItems
внутри Section
тег в файле конфигурации. Я искал решения, но все, что я нашел, не помогло с этим. Для лучшего понимания того, чего я пытаюсь добиться, вот как выглядит мой конфиг:
<configuration>
<configSections>
<section name="AdminConfig" type="XmlTest.AdminConfig, XmlTest"/>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<AdminConfig>
<Field name="field1" key="12345" path="asd"/>
<Section>
<Item key="12345"/>
<Item key="54321"/>
</Section>
</AdminConfig>
</configuration>
1 ответ
ОК, так что я нашел проблему. Хотя Sections
класс имел это [ConfigurationCollection(typeof(SectionItem), AddItemName = "Item", CollectionType = ConfigurationElementCollectionType.BasicMap)]
Я должен был аннотировать собственность в ConfigurationSection
класс, следующим образом:
[ConfigurationProperty("Section")]
[ConfigurationCollection(typeof(Sections), AddItemName = "Item")]
public Sections Sections
{
get
{
return (Sections)this["Section"];
}
}
Теперь элементы распознаются, и все работает правильно.