2010-02-25 3 views
5

sto serializzazione una classe e ottengo la seguente eccezione:XMLSERIALIZE Eccezione

è necessario implementare una funzione di accesso di default sul System.Configuration.SettingsPropertyCollection perché eredita da ICollection.

quando viene eseguita la seguente riga:

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

Qualsiasi aiuto?

public class CustomConfiguration : ConfigurationObjectBase 
{ 

     public CustomConfiguration() { //DO NOTHING. } 

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

} 

ConfigurationObjectBase deriva dal System.configuration.ApplicationSettingsBase.

+1

Potete mostrare qualsiasi versione della vostra classe 'CustomConfiguration' (in particolare l'eredità, ecc.)? –

+0

classe pubblica CustomConfiguration: ConfigurationObjectBase { public CustomConfiguration() { // DO NOTHING. } ///

/// Versione /// [utente] pubblico uint Versione { ottenere { ritorno ((uint) (questo [ "Version"])); } set { this ["Versione"] = valore; }} } ConfigurationObjectBase è derivato da System.configuration.ApplicationSettingsBase – siva

+0

Posso chiedere perché si sta cercando di serializzare questo comunque? Sembra un po 'strano. –

risposta

4

"accesso predefinito" è la proprietà speciale che restituisce un oggetto della raccolta basato su suo indice. ad esempio:

[Serializable()] 
public class IntList : ICollection { 

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

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

Pertanto non disponibile per implementarlo nella classe di terze parti esistente. L'uso della serializzazione xml per ApplicationSettings è una pessima idea, usa i metodi Save(), Reload() e Reset(), oppure usa il tuo non derivato dalle classi ApplicationSettingsBase CustomConfiguration.

0

si deve avere un costruttore di default, cioè uno che non prende alcun parametro, in questo modo ....

class foo 
{ 
    public foo() {} 
} 

se la classe si sta cercando di serializzare non ne ha uno, XMLSerializer getta quell'eccezione Se si sta tentando di serializzare una classe integrata, sarà necessario crearne una propria o creare una classe wrapper.

+0

Nota che il tipo è 'System.Configuration.SettingsPropertyCollection' ... non è facile modificarlo. –

+0

Anche l'aggiunta di un costruttore predefinito non ha funzionato. – siva

+0

Genera la stessa eccezione – siva