2009-05-18 8 views
5

Ecco la classe im cercando di memorizzareC Impostazioni # applicazione non risparmio utilizzando classe personalizzata

[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() 
    { } 
} 

Database è la classe genitore che sto cercando negozio, chiunque vede nulla di male? Quando istanzio la classe e la salvo, niente viene salvato. Cosa dà?

MODIFICA! Il codice che viene utilizzato per salvare:

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

che sto semplicemente cercando di memorizzare un'istanza di una classe database nel AppSettings

+1

Potrebbe inserire il codice che si utilizza per salvare la classe in formato XML –

+0

cura post originale per mostrare come sto chiamando – Tom

+0

opps ho modificato lo stesso tempo come avete fatto, mi dispiace –

risposta

5

Si potrebbe provare a fare le classi public-XmlSerializer è esigente in fatto di che .

Tuttavia, mi sembra di ricordare che il codice delle impostazioni è molto più interessato ai convertitori di tipi; potresti provare a scrivere un TypeConverter per questo?

+0

sì che lo ha fatto, non li avevo come pubblici. Grazie mille gemma! – Tom

+0

Era solo l'accessor che dovevi passare a Public da solo o dovevi usare anche TypeConverter? – Vidar

+0

@Vidar: dal commento di Tom, presumo che sia il 'public'. –

Problemi correlati