views:

89

answers:

2

Hello. I am serializing a class and I get the following exception:

You must implement a default accessor on System.Configuration.SettingsPropertyCollection because it inherits from ICollection.

when the following line is executed:

XmlSerializer xs = new XmlSerializer(typeof(CustomConfiguration));

Any help?

public class CustomConfiguration : ConfigurationObjectBase 
{ 

         public CustomConfiguration () { //DO NOTHING. } 

         [User] 
         public uint Version 
         { get { return ((uint)(this["Version"])); } 
           set { this["Version"] = value; } 
}

} 

ConfigurationObjectBase is derived from System.configuration.ApplicationSettingsBase.

A: 

you have to have a default constructor, that is, one that does not take any parameters, like so....

class foo
{
    public foo() {}
}

if the class you are trying to serialize does not have one, XMLSerializer throws that exception. If you are trying to serialize a built-in class, you are going to have to derive your own or create a wrapper class.

Muad'Dib
Note the type is `System.Configuration.SettingsPropertyCollection`... not easy to edit that.
Marc Gravell
Adding default constructor also did not work.
Maneesh
Throws the same exception
Maneesh
A: 

"default accessor" is the special property that returns an object of the collection based on its index. for example:

[Serializable()]
public class IntList : ICollection {

    // Default Accessor Implementation
    public int this[int index] {
        get {

            return 0;
        }
        set { /* Do Nothing */ }
    }
}

Therefore unavailable to implement that in existing third-party class. Using xml serializing for ApplicationSettings is very bad idea, use Save(), Reload() and Reset() methods, or use your own not derived from ApplicationSettingsBase CustomConfiguration classes.

necrostaz