2010-02-25 14 views
5

estoy serializar una clase y me da la siguiente excepción:XMLSERIALIZE Excepción

debe implementar un descriptor de acceso por defecto en System.Configuration.SettingsPropertyCollection porque hereda de ICollection.

cuando se ejecuta la siguiente línea:

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

Cualquier ayuda?

public class CustomConfiguration : ConfigurationObjectBase 
{ 

     public CustomConfiguration() { //DO NOTHING. } 

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

} 

ConfigurationObjectBase se deriva de System.configuration.ApplicationSettingsBase.

+1

¿Puedes mostrar cualquier versión de tu clase 'CustomConfiguration' (en particular, la herencia, etc.)? –

+0

clase pública CustomConfiguration: ConfigurationObjectBase { public CustomConfiguration() { // NO HACER NADA. } ///

/// /// Versión [usuario] uint Versión pública { obtener { retorno ((uint) (esto [ "Versión"])); } conjunto { this ["Version"] = value; } }} ConfigurationObjectBase se deriva de System.configuration.ApplicationSettingsBase – siva

+0

¿Puedo preguntar por qué usted está tratando de Serialice esto de todos modos? Parece un poco extraño. –

Respuesta

4

"acceso predeterminado" es la propiedad especial que devuelve un objeto de la colección basado en su índice. por ejemplo:

[Serializable()] 
public class IntList : ICollection { 

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

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

Por lo tanto, no está disponible para implementar eso en la clase de terceros existente. Usar serialización xml para ApplicationSettings es una muy mala idea, use los métodos Save(), Reload() y Reset(), o use los suyos propios no derivados de las clases CustomConfiguration de ApplicationSettingsBase.

0

usted tiene que tener un constructor por defecto, es decir, uno que no toma ningún parámetro, al igual que ....

class foo 
{ 
    public foo() {} 
} 

si la clase que usted está tratando de serializar no tiene uno, XMLSerializer arroja esa excepción. Si intenta serializar una clase incorporada, tendrá que derivar la suya o crear una clase contenedora.

+0

Tenga en cuenta que el tipo es 'System.Configuration.SettingsPropertyCollection' ... no es fácil editar eso. –

+0

Agregar constructor predeterminado tampoco funcionó. – siva

+0

Lanza la misma excepción – siva