2009-05-18 5 views
5

Aquí está la clase im tratando de almacenarC# Configuración de aplicaciones no ahorrando el uso de clase personalizada

[Serializable] 
[XmlRoot(ElementName = "Database", IsNullable = false, Namespace = "http://somesite.com")] 

class Database 
{ 
    [XmlAttribute(AttributeName = "Name")] 
    public string Name { get; set; } 

    [XmlAttribute(AttributeName = "Provider")] 
    public DatabaseProvider Provider { get; set; } 

    [XmlAttribute(AttributeName = "Driver")] 
    public string Driver { get; set; } 

    [XmlElement("DatabaseEntry")] 
    public List<DatabaseEntry> SavedEntries { get; set; } 

    public Database() 
    { 
     SavedEntries = new List<DatabaseEntry>(); 
    } 

    public Database(string type, string provider, string driver) 
    { 

     Name = type; 
     Driver = driver; 
     Provider = DatabaseProvider.SqlClient; 

     Provider = SetProvider(provider); 
     SavedEntries = new List<DatabaseEntry>(); 
    } 

    private DatabaseProvider SetProvider(string provider) 
    { 
     switch (provider) 
     { 
      case "OleDb": 
       return DatabaseProvider.OleDb; 
      case "SqlClient": 
       return DatabaseProvider.SqlClient; 
      default: 
       return DatabaseProvider.SqlClient; 
     } 
    } 
} 

[Serializable] 
[XmlRoot(ElementName = "DatabaseEntry", IsNullable = false, Namespace = "http://somesite.com")] 

class DatabaseEntry 

{ 
    [XmlAttribute(AttributeName = "Name")] 
    public string Name { get; set; } 

    [XmlAttribute(AttributeName = "ConnectionString")] 
    public string ConnectionString { get; set; } 

    [XmlAttribute(AttributeName = "DsnString")] 
    public string DsnString { get; set; } 

    public DatabaseEntry() 
    { } 
} 

base de datos es la clase padre que estoy tratando tienda, que nadie vea nada malo? Cuando instancia la clase y la guardo, no se guarda nada. ¿Lo que da?

EDITAR! El código que se utiliza para guardar:

if (Settings.Default.SqlDatabase == null) 
    { 
     Settings.Default.SqlDatabase = CreateNewDatabase(); 
     Settings.Default.Save(); 
    } 

private Database CreateNewDatabase() 
{ 
    Database data = new Database("SQL Server", "SqlClient", "SQL Native Client"); 
    data.SavedEntries.Add(new DatabaseEntry() 
    { 
     Name = "Default", 
     ConnectionString = @"Hello1", 
     DsnString = @"Hello2" 
    }); 
    return data; 
} 

Simplemente estoy tratando de almacenar una instancia de una clase de base de datos en los AppSettings

+1

Podría publicar el código que está utilizando para guardar la clase como xml –

+0

publicación original editada para mostrar cómo la estoy llamando – Tom

+0

opps Lo edité al mismo tiempo que lo hizo, disculpe por eso –

Respuesta

5

Usted podría tratar de hacer las clases public-XmlSerializer es exigente con la que .

Sin embargo, parece recordar que el código de configuración está mucho más interesado en los convertidores de tipo; podrías intentar escribir un TypeConverter para eso?

+0

sí que lo hizo, no los tenía como público. Muchas gracias, amigo! – Tom

+0

¿Fue solo el accesorio el que tuvo que cambiar a Public por sí mismo o tuvo que usar TypeConverter también? – Vidar

+0

@Vidar - del comentario de Tom, supongo que solo lo hizo el 'público'. –

Cuestiones relacionadas