Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unrecognized element "Item" in config file with custom config section

I have a custom config which is based on some classes. My problem is that I get an error saying that a config element is unrecognized. The class is as follows:

[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;
    }
  }

And the SectionItem class:

public class SectionItem : ConfigurationElement
{
    [ConfigurationProperty("key", IsRequired = true, IsKey = true)]
    public string Key
    {
        get { return this["key"] as string; }
    }
}

If I add a configuration property of type SectionItems in the Sections class that won't work for me, because I want to have multiple SectonItems inside the Section tag in the config file. I've searched for solutions but everything I've found didn't do the trick with this. For a better understanding of what I'm trying to achieve this is how my config looks:

<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>
like image 811
Cosmin Ionascu Avatar asked Oct 01 '13 10:10

Cosmin Ionascu


1 Answers

OK so I've found the problem. Although the Sections class had this [ConfigurationCollection(typeof(SectionItem), AddItemName = "Item", CollectionType = ConfigurationElementCollectionType.BasicMap)] I had to annotate the property in the ConfigurationSection class, as follows:

 [ConfigurationProperty("Section")]
 [ConfigurationCollection(typeof(Sections), AddItemName = "Item")]
 public Sections Sections
 {
    get
    {
      return (Sections)this["Section"];
    }
 }

Now the items are recognized and stuff is working properly.

like image 67
Cosmin Ionascu Avatar answered Oct 27 '22 15:10

Cosmin Ionascu